<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<!-- saved from url=(0084)http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_encapsulation.html -->
<html xmlns="http://www.w3.org/1999/xhtml" id="sixapart-standard"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    
<meta name="generator" content="Movable Type  5.2.2">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="./Javascript 面向对象编程（一）：封装 - 阮一峰的网络日志_files/styles.css" type="text/css">
<link rel="start" href="http://www.ruanyifeng.com/blog/" title="Home">
<link rel="alternate" type="application/atom+xml" title="Recent Entries" href="http://feeds.feedburner.com/ruanyifeng">
<script async="" src="./Javascript 面向对象编程（一）：封装 - 阮一峰的网络日志_files/analytics.js"></script><script type="text/javascript" src="./Javascript 面向对象编程（一）：封装 - 阮一峰的网络日志_files/mt.js"></script>
<!--
<rdf:RDF xmlns="http://web.resource.org/cc/"
         xmlns:dc="http://purl.org/dc/elements/1.1/"
         xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<Work rdf:about="http://www.ruanyifeng.com/blog/2012/07/micropayment_result.html">
<dc:title>小额支付试验的结果</dc:title>
<dc:description>去年5月，Google关闭了我的Adsense广告账户。...</dc:description>
<dc:creator>阮一峰</dc:creator>
<dc:date>2012-07-31T10:47:12+08:00</dc:date>
<license rdf:resource="http://creativecommons.org/licenses/by-nc-nd/3.0/" />
</Work>
<License rdf:about="http://creativecommons.org/licenses/by-nc-nd/3.0/">
</License>
</rdf:RDF>
-->


    
    <link rel="prev" href="http://www.ruanyifeng.com/blog/2010/05/html5_codec_fight.html" title="HTML5的视频格式之争">
    <link rel="next" href="http://www.ruanyifeng.com/blog/2010/05/an_unsinkable_tpb.html" title="不会沉没的海盗湾">
    
    <title>Javascript 面向对象编程（一）：封装 - 阮一峰的网络日志</title>
<script src="./Javascript 面向对象编程（一）：封装 - 阮一峰的网络日志_files/bsStatic.js" type="text/javascript" charset="utf-8"></script><script src="./Javascript 面向对象编程（一）：封装 - 阮一峰的网络日志_files/bs-engine.js" type="text/javascript" charset="utf-8"></script><style type="text/css">a.bshareDiv,#bsPanel,#bsMorePanel,#bshareF{border:none;background:none;padding:0;margin:0;font:12px Helvetica,Calibri,Tahoma,Arial,宋体,sans-serif;line-height:14px;}#bsPanel div,#bsMorePanel div,#bshareF div{display:block;}.bsRlogo .bsPopupAwd,.bsRlogoSel .bsPopupAwd,.bsLogo .bsPopupAwd,.bsLogoSel .bsPopupAwd{line-height:16px !important;}a.bshareDiv div,#bsFloatTab div{*display:inline;zoom:1;display:inline-block;}a.bshareDiv img,a.bshareDiv div,a.bshareDiv span,a.bshareDiv a,#bshareF table,#bshareF tr,#bshareF td{text-decoration:none;background:none;margin:0;padding:0;border:none;line-height:1.2}a.bshareDiv span{display:inline;float:none;}div.buzzButton{cursor:pointer;font-weight:bold;}.buzzButton .shareCount a{color:#333}.bsStyle1 .shareCount a{color:#fff}span.bshareText{white-space:nowrap;}span.bshareText:hover{text-decoration:underline;}a.bshareDiv .bsPromo,div.bshare-custom .bsPromo{display:none;position:absolute;z-index:100;}a.bshareDiv .bsPromo.bsPromo1,div.bshare-custom .bsPromo.bsPromo1{width:51px;height:18px;top:-18px;left:0;line-height:16px;font-size:12px !important;font-weight:normal !important;color:#fff;text-align:center;background:url(http://static.bshare.cn/frame/images/bshare_box_sprite2.gif) no-repeat 0 -606px;}div.bshare-custom .bsPromo.bsPromo2{background:url(http://static.bshare.cn/frame/images/bshare_promo_sprite.gif) no-repeat;cursor:pointer;}</style><style type="text/css">.bsBox{display:none;z-index:100000001;font-size:12px;background:url(http://static.bshare.cn/frame/images//background-opaque-dark.gif) !important;padding:6px !important;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px;}.bsClose{_overflow:hidden;cursor:pointer;position:absolute;z-index:10000000;color:#666;font-weight:bold;font-family:Helvetica,Arial;font-size:14px;line-height:20px;}.bsTop{color:#666;background:#f2f2f2;height:24px;line-height:24px;border-bottom:1px solid #e8e8e8;}.bsTop span{float:left;}.bsFrameDiv,#bsMorePanel{border:none;background:#fff;}.bsReturn{float:right;*margin-right:20px;margin-right:36px;text-align:right;cursor:pointer;line-height:24px;color:#666;opacity:0.5;}#bsReturn:hover{text-decoration:underline;opacity:1;}</style><script src="./Javascript 面向对象编程（一）：封装 - 阮一峰的网络日志_files/bsMore.js" type="text/javascript" charset="utf-8"></script><script src="./Javascript 面向对象编程（一）：封装 - 阮一峰的网络日志_files/bshareS1.js" type="text/javascript" charset="utf-8"></script><style type="text/css">div.bsClear{clear:both;height:0;line-height:0;overflow:hidden;font-size:0;}.bsSearchDiv{padding:5px 15px;background-color:#fafafa;}.bFind-wrapper-top{background:#fff;border-color:#ccc #aaa #aaa #ccc;border-style:solid;border-width:1px;height:16px;padding:4px;margin:0;}.bFind-wrapper-top input{padding:0 !important;border:none !important;box-shadow:none !important;line-height:16px !important;}.bFind-placeholder{background:url("http://static.bshare.cn/css/images/search-icon.gif") no-repeat;display:block;float:left;height:16px;width:16px;}.bFind{background:none;border:none;float:left;font-size:11px !important;height:16px !important;margin-left:3px;outline:none;padding:0;width:400px;}.bsPlatDiv{height:322px;background:#fff;overflow:auto;padding:0 15px;}#bsLogoList{display:block;list-style:none;overflow:hidden;margin:0;padding:0;}#bsLogoList li{float:left;display:inline-block;width:71px;text-align:center;font-size:12px;height:80px;margin:0 !important;}#bsLogoList .bsPlatIcon{cursor:pointer;display:block !important;text-align:center;}#bsLogoList .bsPlatImg{width:32px;height:32px;border:none !important;display:inline-block;}#bsLogoList .bsPlatImg:hover{-moz-border-radius:7px;-webkit-border-radius:7px;border-radius:7px;box-shadow:0 0 15px #a7a8ac;}#bsLogoList .bsPlatName{white-space:nowrap;text-overflow:ellipsis;overflow:hidden;text-align:center;color:#333 !important;margin-top:2px;line-height:140%;*width:70px;}#bsLogoList .bsPromoM{text-align:center;}.bsFooterDiv{height:24px;line-height:24px;padding:0 15px;border-top:1px solid #e8e8e8;background:#f2f2f2;text-align:right;}a.bsLogoLink{color:#666;}.bsLogoLink:hover{text-decoration:underline;}.bsPromoM{background:url(http://static.bshare.cn/frame/images//bshare_box_sprite2.gif) no-repeat top left;}.bsNew,.bsHot,.bsRec,.bsAwd{background-position:0 -552px;width:19px;margin:5px auto 1px;line-height:16px;height:18px;font-size:12px;color:#fff;overflow:hidden;}.bsNew{background-position:0 -570px;}.bsRec{width:30px;background-position:0 -588px;}.bsAwd{background:url(http://static.bshare.cn/frame/images//promot/promote.gif) no-repeat;}</style><script src="./Javascript 面向对象编程（一）：封装 - 阮一峰的网络日志_files/bshare_view" type="text/javascript" charset="utf-8"></script><style type="text/css">a.bsSiteLink{text-decoration:none;color:#666;}a.bsSiteLink:hover{text-decoration:underline;}a.bshareDiv{overflow:hidden;height:16px;line-height:18px;font-size:14px;color:#333;padding-left:0;}a.bshareDiv:hover{text-decoration:none;}div.bsTitle{padding:0 8px;border-bottom:1px solid #e8e8e8;color:#666;background:#f2f2f2;text-align:left;}div.buzzButton{cursor:pointer;}div.bsRlogo,div.bsRlogoSel{width:68px;float:left;margin:0;padding:2px 0;}div.bsRlogo a,div.bsRlogoSel a{float:left;}div.bsLogo,div.bsLogoSel{float:left;width:111px;text-align:left;height:auto;padding:2px 4px;margin:2px 0;white-space:nowrap;overflow:hidden;}div.bsLogoSel,div.bsRlogoSel{border:1px solid #ddd;background:#f1f1f1;}div.bsLogo,div.bsRlogo{border:1px solid #fff;background:#fff;}div.bsLogo a,div.bsLogoSel a{display:block;height:16px;line-height:16px;padding:0 0 0 24px;text-decoration:none;float:left;overflow:hidden;}div.bsLogoSel a,div.bsRlogoSel a{color:#000;border:none;}div.bsLogo a,div.bsRlogo a{color:#666;border:none;}div.bsLogoLink{width:121px;overflow:hidden;background:#FFF;float:left;margin:3px 0;}#bsLogin{float:right;text-align:right;overflow:hidden;height:100%;}#bsPanel{position:absolute;z-index:100000000;font-size:12px;width:258px;background:url(http://static.bshare.cn/frame/images/background-opaque-dark.png) !important;padding:6px !important;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px;}div.bsClear{clear:both;height:0;line-height:0;font-size:0;overflow:hidden;}div.bsPopupAwd{background:url(http://static.bshare.cn/frame/images//bshare_box_sprite2.gif) no-repeat top left;background-position:0 -624px;width:18px;padding-left:3px;text-align:center;float:left;margin-left: 2px;height:15px;font-size:12px;color:#fff;overflow:hidden;}div.bsRlogo .bsPopupAwd,div.bsRlogoSel .bsPopupAwd{float:left;margin:5px 0 0 -14px;}</style><style type="text/css">a.bsSiteLink{text-decoration:none;color:#666;}a.bsSiteLink:hover{text-decoration:underline;}a.bshareDiv{overflow:hidden;height:16px;line-height:18px;font-size:14px;color:#333;padding-left:0;}a.bshareDiv:hover{text-decoration:none;}div.bsTitle{padding:0 8px;border-bottom:1px solid #e8e8e8;color:#666;background:#f2f2f2;text-align:left;}div.buzzButton{cursor:pointer;}div.bsRlogo,div.bsRlogoSel{width:68px;float:left;margin:0;padding:2px 0;}div.bsRlogo a,div.bsRlogoSel a{float:left;}div.bsLogo,div.bsLogoSel{float:left;width:111px;text-align:left;height:auto;padding:2px 4px;margin:2px 0;white-space:nowrap;overflow:hidden;}div.bsLogoSel,div.bsRlogoSel{border:1px solid #ddd;background:#f1f1f1;}div.bsLogo,div.bsRlogo{border:1px solid #fff;background:#fff;}div.bsLogo a,div.bsLogoSel a{display:block;height:16px;line-height:16px;padding:0 0 0 24px;text-decoration:none;float:left;overflow:hidden;}div.bsLogoSel a,div.bsRlogoSel a{color:#000;border:none;}div.bsLogo a,div.bsRlogo a{color:#666;border:none;}div.bsLogoLink{width:121px;overflow:hidden;background:#FFF;float:left;margin:3px 0;}#bsLogin{float:right;text-align:right;overflow:hidden;height:100%;}#bsPanel{position:absolute;z-index:100000000;font-size:12px;width:258px;background:url(http://static.bshare.cn/frame/images/background-opaque-dark.png) !important;padding:6px !important;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px;}div.bsClear{clear:both;height:0;line-height:0;font-size:0;overflow:hidden;}div.bsPopupAwd{background:url(http://static.bshare.cn/frame/images//bshare_box_sprite2.gif) no-repeat top left;background-position:0 -624px;width:18px;padding-left:3px;text-align:center;float:left;margin-left: 2px;height:15px;font-size:12px;color:#fff;overflow:hidden;}div.bsRlogo .bsPopupAwd,div.bsRlogoSel .bsPopupAwd{float:left;margin:5px 0 0 -14px;}</style></head>
<body id="scrapbook" class="mt-entry-archive one-column" onload="individualArchivesOnLoad(commenter_name)">
<script>
if (/mobile/i.test(navigator.userAgent) || /android/i.test(navigator.userAgent)) document.body.classList.add('mobile');
</script>
    <div id="container">
        <div id="container-inner">

            <div id="header">
    <div id="header-inner">
        <div id="header-content">


            <div id="header-name">阮一峰的网络日志 <span id="site_location"> » <a href="http://www.ruanyifeng.com/blog/" accesskey="1">首页</a></span><span id="site_archive"> » <a href="http://www.ruanyifeng.com/blog/archives.html">档案</a></span>
</div>

<div id="google_search">
<!-- SiteSearch Google -->
<form action="http://www.ruanyifeng.com/blog/search.html" id="cse-search-box">
      <div>
        <input type="hidden" name="cx" value="016304377626642577906:b_e9skaywzq">
    <input type="hidden" name="cof" value="FORID:11">
    <input type="hidden" name="ie" value="UTF-8">
        <input type="text" name="q" size="20" class="searchbox" id="sbi" value="">
        <input type="image" src="./Javascript 面向对象编程（一）：封装 - 阮一峰的网络日志_files/top_search_submit.gif" class="searchbox_submit" value="" alt="搜索" name="sa">
      </div>
    </form>
<!-- SiteSearch Google -->
</div>
<div id="feed_icon">
<a href="http://www.ruanyifeng.com/feed.html" title="订阅Feed">
<img src="" alt="" style="border: 0pt none;">
</a></div>

        </div>
    </div>
</div>



            <div id="content">
                <div id="content-inner">


                    <div id="alpha">
                        <div id="alpha-inner">


                            <div id="entry-1394" class="entry-asset asset hentry">
                                <div class="asset-header">
<div class="asset-nav entry-nav">

<div class="entry-location">
<ul>
<li>上一篇：<a href="http://www.ruanyifeng.com/blog/2010/05/html5_codec_fight.html" title="HTML5的视频格式之争">HTML5的视频格式之</a></li>
<li>下一篇：<a href="http://www.ruanyifeng.com/blog/2010/05/an_unsinkable_tpb.html" title="不会沉没的海盗湾">不会沉没的海盗湾&nbsp;&nbsp;&nbsp;</a></li>
</ul>
</div>


    
                                    <div class="entry-categories">
                                        <p>分类<span class="delimiter">：</span></p>
                                        <ul>
                                            <li><a href="http://www.ruanyifeng.com/blog/javascript/" rel="tag">JavaScript</a></li>
                                        </ul>
                                    </div>
    


                                            
</div>
                                </div>
<article class="hentry">
                                    <h1 id="page-title" class="asset-name entry-title">Javascript 面向对象编程（一）：封装</h1>
                                            <div id="share_button" style="float:right;padding-right:2em;padding-top:1em;"><a class="bshareDiv" href="http://www.bshare.cn/share" style="display: block; text-decoration: none; padding: 0px; margin: 0px; font-size: 12px; height: 21px; width: 51px;"><div class="bsPromo bsPromo1"></div><div class="buzzButton bsStyle10" style="height:21px;color:#333;;background:transparent url(http://static.bshare.cn/frame/images/button_custom10-zh-Orange.gif) no-repeat;text-align:center;width:51px;"></div><div style="clear:both;"></div></a><script type="text/javascript" charset="utf-8" src="./Javascript 面向对象编程（一）：封装 - 阮一峰的网络日志_files/buttonLite.js"></script>                                       
<script type="text/javascript" charset="utf-8">
bShare.addEntry({
    title: document.getElementById("page-title").innerHTML,
url:window.location.href
});
</script></div>
                                    <div class="asset-meta">
                                        

                                            <p class="vcard author">作者： <a class="fn url" href="http://www.ruanyifeng.com/">阮一峰</a></p>
                                    <p>日期： <a href="http://www.ruanyifeng.com/blog/2010/05/"><abbr class="published" title="2010-05-17T17:03:33+08:00">2010年5月17日</abbr></a></p>


                                    </div>
                                
                                <div class="asset-content entry-content" id="main-content">

                                    <!-- div class="asset-body" -->
                                        <p>学习Javascript，最难的地方是什么？</p>
                                    <!-- /div -->


                                    <!-- div id="more" class="asset-more" -->
                                        <p>我觉得，Object（对象）最难。因为Javascript的Object模型很独特，和其他语言都不一样，初学者不容易掌握。</p>

<p>下面就是我的学习笔记，希望对大家学习这个部分有所帮助。我主要参考了以下两本书籍：</p>

<p><img src="./Javascript 面向对象编程（一）：封装 - 阮一峰的网络日志_files/bg2010051701.jpg"></p>

<p><a href="https://www.packtpub.com/object-oriented-javascript-applications-libraries/book" target="_blank">《面向对象的Javascript》</a>（Object-Oriented JavaScript）</p>

<p><img src="./Javascript 面向对象编程（一）：封装 - 阮一峰的网络日志_files/bg2010051702.jpg"></p>

<p><a href="http://www.wrox.com/WileyCDA/WroxTitle/Professional-JavaScript-for-Web-Developers-2nd-Edition.productCd-047022780X.html" target="_blank">《Javascript高级程序设计（第二版）》</a>（Professional JavaScript for Web Developers, 2nd Edition)</p>

<p>它们都是非常优秀的Javascript读物，推荐阅读。</p>

<p>笔记分成三部分。今天的第一部分是讨论"封装"（Encapsulation），后面的<a href="http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_inheritance.html" target="_blank">第二部分</a>和<a href="http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_inheritance_continued.html" target="_blank">第三部分</a>讨论"继承"（Inheritance）。</p>

<p>============================</p>

<p><strong>Javascript 面向对象编程（一）：封装</strong></p>

<p>作者：阮一峰</p>

<p>Javascript是一种基于对象（object-based）的语言，你遇到的所有东西几乎都是对象。但是，它又不是一种真正的面向对象编程（OOP）语言，因为它的语法中没有class（类）。</p>

<p>那么，如果我们要把"属性"（property）和"方法"（method），封装成一个对象，甚至要从原型对象生成一个实例对象，我们应该怎么做呢？</p>

<p><strong>一、 生成对象的原始模式</strong></p>

<p>假定我们把猫看成一个对象，它有"名字"和"颜色"两个属性。</p>

<blockquote>

<p>　　var Cat = {</p>

<p>　　　　name : '',</p>

<p>　　　　color : ''</p>

<p>　　} </p>

</blockquote>

<p>现在，我们需要根据这个原型对象的规格（schema），生成两个实例对象。</p>

<blockquote>

<p>　　var cat1 = {}; // 创建一个空对象</p>

<p>　　　　cat1.name = "大毛"; // 按照原型对象的属性赋值</p>

<p>　　　　cat1.color = "黄色";</p>

<p>　　var cat2 = {};</p>

<p>　　　　cat2.name = "二毛";</p>

<p>　　　　cat2.color = "黑色"; </p>

</blockquote>

<p>好了，这就是最简单的封装了，把两个属性封装在一个对象里面。但是，这样的写法有两个缺点，一是如果多生成几个实例，写起来就非常麻烦；二是实例与原型之间，没有任何办法，可以看出有什么联系。</p>

<p><strong>二、 原始模式的改进</strong></p>

<p>我们可以写一个函数，解决代码重复的问题。</p>

<blockquote>

<p>　　function Cat(name,color){</p>

<p>　　　　return {</p>

<p>　　　　　　name:name,</p>

<p>　　　　　　color:color</p>

<p>　　　　}</p>

<p>　　} </p>

</blockquote> 

<p>然后生成实例对象，就等于是在调用函数：</p>

<blockquote>

<p>　　var cat1 = Cat("大毛","黄色");</p>

<p>　　var cat2 = Cat("二毛","黑色");</p>

</blockquote>

<p>这种方法的问题依然是，cat1和cat2之间没有内在的联系，不能反映出它们是同一个原型对象的实例。</p>

<p><strong>三、 构造函数模式</strong></p>

<p>为了解决从原型对象生成实例的问题，Javascript提供了一个构造函数（Constructor）模式。</p>

<p>所谓"构造函数"，其实就是一个普通函数，但是内部使用了<a href="http://www.ruanyifeng.com/blog/2010/04/using_this_keyword_in_javascript.html" target="_blank">this变量</a>。对构造函数使用new运算符，就能生成实例，并且this变量会绑定在实例对象上。 </p>

<p>比如，猫的原型对象现在可以这样写，</p>

<blockquote>

<p>　　function Cat(name,color){</p>

<p>　　　　this.name=name;</p>

<p>　　　　this.color=color;</p>

<p>　　} </p>

</blockquote>

<p>我们现在就可以生成实例对象了。</p>

<blockquote>

<p>　　var cat1 = new Cat("大毛","黄色");</p>

<p>　　var cat2 = new Cat("二毛","黑色");</p>

<p>　　alert(cat1.name); // 大毛</p>

<p>　　alert(cat1.color); // 黄色</p>

</blockquote>  

<p>这时cat1和cat2会自动含有一个constructor属性，指向它们的构造函数。</p>

<blockquote>

<p>　　alert(cat1.constructor == Cat); //true</p>

<p>　　alert(cat2.constructor == Cat); //true</p>

</blockquote>

<p>Javascript还提供了一个instanceof运算符，验证原型对象与实例对象之间的关系。</p>

<blockquote>

<p>　　alert(cat1 instanceof Cat); //true</p>

<p>　　alert(cat2 instanceof Cat); //true </p>

</blockquote>

<p><strong>四、构造函数模式的问题</strong></p>

<p>构造函数方法很好用，但是存在一个浪费内存的问题。</p>

<p>请看，我们现在为Cat对象添加一个不变的属性"type"（种类），再添加一个方法eat（吃老鼠）。那么，原型对象Cat就变成了下面这样：</p>

<blockquote>

<p>　　function Cat(name,color){</p>

<p>　　　　this.name = name;</p>

<p>　　　　this.color = color;</p>

<p>　　　　this.type = "猫科动物";</p>

<p>　　　　this.eat = function(){alert("吃老鼠");};</p>

<p>　　} </p>

</blockquote>

<p>还是采用同样的方法，生成实例：</p>

<blockquote>

<p>　　var cat1 = new Cat("大毛","黄色");</p>

<p>　　var cat2 = new Cat ("二毛","黑色");</p>

<p>　　alert(cat1.type); // 猫科动物</p>

<p>　　cat1.eat(); // 吃老鼠 </p>

</blockquote>

<p>表面上好像没什么问题，但是实际上这样做，有一个很大的弊端。那就是对于每一个实例对象，type属性和eat()方法都是一模一样的内容，每一次生成一个实例，都必须为重复的内容，多占用一些内存。这样既不环保，也缺乏效率。</p>

<blockquote>

<p>　　alert(cat1.eat == cat2.eat); //false</p>

</blockquote>

<p>能不能让type属性和eat()方法在内存中只生成一次，然后所有实例都指向那个内存地址呢？回答是可以的。 </p>

<p><strong>五、 Prototype模式 </strong></p>

<p>Javascript规定，每一个构造函数都有一个prototype属性，指向另一个对象。这个对象的所有属性和方法，都会被构造函数的实例继承。</p>

<p>这意味着，我们可以把那些不变的属性和方法，直接定义在prototype对象上。</p>

<blockquote>

<p>　　function Cat(name,color){</p>

<p>　　　　this.name = name;</p>

<p>　　　　this.color = color;</p>

<p>　　}</p>

<p>　　Cat.prototype.type = "猫科动物";</p>

<p>　　Cat.prototype.eat = function(){alert("吃老鼠")}; </p>

</blockquote>

<p>然后，生成实例。</p>

<blockquote>

<p>　　var cat1 = new Cat("大毛","黄色");</p>

<p>　　var cat2 = new Cat("二毛","黑色");</p>

<p>　　alert(cat1.type); // 猫科动物</p>

<p>　　cat1.eat(); // 吃老鼠</p>

</blockquote>

<p>这时所有实例的type属性和eat()方法，其实都是同一个内存地址，指向prototype对象，因此就提高了运行效率。</p>

<blockquote>

<p>　　alert(cat1.eat == cat2.eat); //true </p>

</blockquote>

<p><strong>六、 Prototype模式的验证方法 </strong></p>

<p>为了配合prototype属性，Javascript定义了一些辅助方法，帮助我们使用它。，</p>

<p><strong>6.1 isPrototypeOf() </strong></p>

<p>这个方法用来判断，某个proptotype对象和某个实例之间的关系。</p>

<blockquote>

<p>　　alert(Cat.prototype.isPrototypeOf(cat1)); //true</p>

<p>　　alert(Cat.prototype.isPrototypeOf(cat2)); //true </p>

</blockquote>

<p><strong>6.2 hasOwnProperty()</strong> </p>

<p>每个实例对象都有一个hasOwnProperty()方法，用来判断某一个属性到底是本地属性，还是继承自prototype对象的属性。</p>

<blockquote>

<p>　　alert(cat1.hasOwnProperty("name")); // true</p>

<p>　　alert(cat1.hasOwnProperty("type")); // false </p>

</blockquote>

<p><strong>6.3 in运算符 </strong></p>

<p>in运算符可以用来判断，某个实例是否含有某个属性，不管是不是本地属性。</p>

<blockquote>

<p>　　alert("name" in cat1); // true</p>

<p>　　alert("type" in cat1); // true</p>

</blockquote>

<p>in运算符还可以用来遍历某个对象的所有属性。</p>

<blockquote>

<p>　　for(var prop in cat1) { alert("cat1["+prop+"]="+cat1[prop]); } </p>

</blockquote>

<p>未完，请继续阅读这个系列的第二部分<a href="http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_inheritance.html" target="_blank">《构造函数的继承》</a>和第三部分<a href="http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_inheritance_continued.html" target="_blank">《非构造函数的继承》</a>。</p>

<p>（完）</p>
                                    <!-- /div -->

                                </div>
    <script type="text/javascript" src="./Javascript 面向对象编程（一）：封装 - 阮一峰的网络日志_files/newwindow.js"></script>
                                <div class="asset-footer">

<h3>文档信息</h3>
<ul>
<li>版权声明：自由转载-非商用-非衍生-保持署名（<a href="http://creativecommons.org/licenses/by-nc-nd/3.0/deed.zh">创意共享3.0许可证</a>）</li>
<li>发表日期： <abbr class="published" title="2010-05-17T17:03:33+08:00">2010年5月17日</abbr></li>
<li>更多内容： <a href="http://www.ruanyifeng.com/blog/archives.html" target="_blank"> 档案</a>  » 
<a href="http://www.ruanyifeng.com/blog/javascript/"> JavaScript</a> 
</li>
<li>购买文集：<a href="http://www.ruanyifeng.com/blog/2014/12/my-blog-book.html" target="_blank"><img src="" style="border:0;"> 《如何变得有思想》</a></li>
<li>社交媒体：<a href="https://twitter.com/ruanyf" target="_blank"><img src="" style="border:0;"> twitter</a>，<a href="http://weibo.com/ruanyf" target="_blank"><img src="" style="border:0;"> weibo</a></li>
<li>Feed订阅： <a href="http://www.ruanyifeng.com/feed.html" target="_blank"><img src="" style="border:0;"></a></li>

</ul>
                                </div>
</article>
                            </div>

   <div id="gegz1">
<p style="text-align:center;"><a href="http://www.v2ex.com/t/182335" target="_blank"><img src="./Javascript 面向对象编程（一）：封装 - 阮一峰的网络日志_files/ad_meican.png" data-src="http://www.ruanyifeng.com/blog/images/ad_meican_2x.png" style="border:none;"></a></p>
   </div>

<div id="related_entries">
<h2>相关文章</h2>
<ul>

<li><strong>2015.06.30: <a href="http://www.ruanyifeng.com/blog/2015/06/es-checker.html">ES6 的功能侦测库 ES-Checker</a></strong>

                           <div class="entry-body">
                              两周前，《ECMAScript国际标准（第6版）》正式通过，下一代 JavaScript 语言定案。

                           </div>

</li>

 
<li><strong>2015.06.08: <a href="http://www.ruanyifeng.com/blog/2015/06/istanbul.html">代码覆盖率工具 Istanbul 入门教程</a></strong>

                           <div class="entry-body">
                              测试的时候，我们常常关心，是否所有代码都测试到了。

                           </div>

</li>

 
<li><strong>2015.05.26: <a href="http://www.ruanyifeng.com/blog/2015/05/command-line-with-node.html">Node.js 命令行程序开发教程</a></strong>

                           <div class="entry-body">
                              一种编程语言是否易用，很大程度上，取决于开发命令行程序的能力。

                           </div>

</li>

 
<li><strong>2015.05.23: <a href="http://www.ruanyifeng.com/blog/2015/05/commonjs-in-browser.html">浏览器加载 CommonJS 模块的原理与实现</a></strong>

                           <div class="entry-body">
                              就在这个周末，npm 超过了 cpan ，成为地球上最大的软件模块仓库。

                           </div>

</li>

 
</ul>
</div>


<div id="googlead1">
<h2>广告<a href="http://www.ruanyifeng.com/ads.html">（购买广告位）</a></h2>
<div id="googlead1-inner">
<div id="googlead1-left">
<a href="http://dxy.com/?utm_source=ruanyifeng.com" target="_blank"><img src="./Javascript 面向对象编程（一）：封装 - 阮一峰的网络日志_files/ad_dxy.jpg" style="border:none;"></a><br>
<a href="http://e.jikexueyuan.com/html5.html?hmsr=ruanyifeng_banner_html5_0713" target="_blank"><img src="./Javascript 面向对象编程（一）：封装 - 阮一峰的网络日志_files/ad_jkxy.jpg" style="border:none;"></a>
</div>
<div id="googlead1-right">

<a href="http://www.zdzdm.com/?r" target="_blank"><img src="./Javascript 面向对象编程（一）：封装 - 阮一峰的网络日志_files/ad_zdzdm.png" style="border:none;"></a><br>
<a href="http://www.yochat.cn/joinus/?hmsr=ruanyifeng&hmmd=%E5%9B%BE%E7%89%87&hmpl=%E6%8B%9B%E8%81%98&hmkw=&hmci=" target="_blank"><img src="./Javascript 面向对象编程（一）：封装 - 阮一峰的网络日志_files/ad_yochat.png" style="border:none;"></a>

</div>
</div>
</div>
                    

                    <div id="comments" class="comments">


    
    
        
    <h2 class="comments-header">留言（84条）</h2>

    <div id="comments-content" class="comments-content" style="clear: left;">
        
        <div id="comment-205604" class="comment">
    <div class="inner">
        <div class="comment-header">
            <div class="asset-meta">
<p>
                <span class="byline">
                    

                    <span class="vcard author"><a title="http://www.shimuuu.com" href="http://www.shimuuu.com/" target="_blank" rel="nofollow">shimu</a></span>

 说：
                </span>
</p>
            </div>
        </div>
        <div class="comment-content" id="comment-quote-205604">
            <p>直白易懂！逐步深入～这篇对于我这种初学者很有用啊！</p>
        </div>
<div class="comment-footer">
<div class="comment-footer-inner">
<p>
                   <abbr class="published" title="May 17, 2010  6:24 PM">2010年5月17日 18:24</abbr>
 | <a href="http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_encapsulation.html#comment-205604">∞</a>
 | <a href="http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_encapsulation.html#comment-text" title="引用shimu的这条留言" onclick="return CommentQuote(&#39;comment-quote-205604&#39;,&#39;shimu&#39;);">引用</a>
</p>
</div>
</div>
    </div>
</div>
        
    
        
        <div id="comment-205605" class="comment">
    <div class="inner">
        <div class="comment-header">
            <div class="asset-meta">
<p>
                <span class="byline">
                    

                    <span class="vcard author"><a title="http://milejia.com" href="http://milejia.com/" target="_blank" rel="nofollow">Astro</a></span>

 说：
                </span>
</p>
            </div>
        </div>
        <div class="comment-content" id="comment-quote-205605">
            <p>崇拜中。。阮兄知识面让我情何以堪啊。。。</p>
        </div>
<div class="comment-footer">
<div class="comment-footer-inner">
<p>
                   <abbr class="published" title="May 17, 2010  6:36 PM">2010年5月17日 18:36</abbr>
 | <a href="http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_encapsulation.html#comment-205605">∞</a>
 | <a href="http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_encapsulation.html#comment-text" title="引用Astro的这条留言" onclick="return CommentQuote(&#39;comment-quote-205605&#39;,&#39;Astro&#39;);">引用</a>
</p>
</div>
</div>
    </div>
</div>
        
    
        
        <div id="comment-205607" class="comment">
    <div class="inner">
        <div class="comment-header">
            <div class="asset-meta">
<p>
                <span class="byline">
                    

                    <span class="vcard author"><a title="http://www.askcici.com/" href="http://www.askcici.com/" target="_blank" rel="nofollow">ciciはLuckyD</a></span>

 说：
                </span>
</p>
            </div>
        </div>
        <div class="comment-content" id="comment-quote-205607">
            <p>不错的note，最近我在看pro Javascript Design Patterns这本书，三、四章的封装、继承这块讲的非常好</p>
        </div>
<div class="comment-footer">
<div class="comment-footer-inner">
<p>
                   <abbr class="published" title="May 17, 2010  9:12 PM">2010年5月17日 21:12</abbr>
 | <a href="http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_encapsulation.html#comment-205607">∞</a>
 | <a href="http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_encapsulation.html#comment-text" title="引用ciciはLuckyD的这条留言" onclick="return CommentQuote(&#39;comment-quote-205607&#39;,&#39;ciciはLuckyD&#39;);">引用</a>
</p>
</div>
</div>
    </div>
</div>
        
    
        
        <div id="comment-205611" class="comment">
    <div class="inner">
        <div class="comment-header">
            <div class="asset-meta">
<p>
                <span class="byline">
                    

                    <span class="vcard author"><a title="http://fkpwolf.net" href="http://fkpwolf.net/" target="_blank" rel="nofollow">fan</a></span>

 说：
                </span>
</p>
            </div>
        </div>
        <div class="comment-content" id="comment-quote-205611">
            <p>《javascript: the good part》中Dauglas不推荐用new的这种方法构造对象，因为如果忘记加上new，“即没有编译时警告，也没有运行时警告”。他推荐的是函数化的方法，不使用prototype。</p>
        </div>
<div class="comment-footer">
<div class="comment-footer-inner">
<p>
                   <abbr class="published" title="May 18, 2010  7:46 AM">2010年5月18日 07:46</abbr>
 | <a href="http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_encapsulation.html#comment-205611">∞</a>
 | <a href="http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_encapsulation.html#comment-text" title="引用fan的这条留言" onclick="return CommentQuote(&#39;comment-quote-205611&#39;,&#39;fan&#39;);">引用</a>
</p>
</div>
</div>
    </div>
</div>
        
    
        
        <div id="comment-205612" class="comment">
    <div class="inner">
        <div class="comment-header">
            <div class="asset-meta">
<p>
                <span class="byline">
                    

                    <span class="vcard author"><a title="http://www.yguess.com" href="http://www.yguess.com/" target="_blank" rel="nofollow">某人</a></span>

 说：
                </span>
</p>
            </div>
        </div>
        <div class="comment-content" id="comment-quote-205612">
            <p>好多年不写程序了，不过还是觉得javascript是挺复杂的。</p>
        </div>
<div class="comment-footer">
<div class="comment-footer-inner">
<p>
                   <abbr class="published" title="May 18, 2010  8:44 AM">2010年5月18日 08:44</abbr>
 | <a href="http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_encapsulation.html#comment-205612">∞</a>
 | <a href="http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_encapsulation.html#comment-text" title="引用某人的这条留言" onclick="return CommentQuote(&#39;comment-quote-205612&#39;,&#39;某人&#39;);">引用</a>
</p>
</div>
</div>
    </div>
</div>
        
    
        
        <div id="comment-205613" class="comment">
    <div class="inner">
        <div class="comment-header">
            <div class="asset-meta">
<p>
                <span class="byline">
                    

                    <span class="vcard author"><a title="http://hi.baidu.com/laoguo2" href="http://hi.baidu.com/laoguo2" target="_blank" rel="nofollow">laoguo</a></span>

 说：
                </span>
</p>
            </div>
        </div>
        <div class="comment-content" id="comment-quote-205613">
            <p>喜欢这篇。<br>
越来越能看出，今后，这种娓娓道来的知识描述形式，将把至今为止的，逻辑严谨机械正确但却难懂的知识描述方式打入历史的垃圾箱里。</p>

<p>人，是有灵性的，是非线性的，是量子性的。<br>
至今为止所谓的“线性严谨二元逻辑性的学术描述方式”，只不过是一种违反人类本质天性的东西，必将在完成其历史使命之后，退出历史舞台。</p>
        </div>
<div class="comment-footer">
<div class="comment-footer-inner">
<p>
                   <abbr class="published" title="May 18, 2010  8:59 AM">2010年5月18日 08:59</abbr>
 | <a href="http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_encapsulation.html#comment-205613">∞</a>
 | <a href="http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_encapsulation.html#comment-text" title="引用laoguo的这条留言" onclick="return CommentQuote(&#39;comment-quote-205613&#39;,&#39;laoguo&#39;);">引用</a>
</p>
</div>
</div>
    </div>
</div>
        
    
        
        <div id="comment-205614" class="comment">
    <div class="inner">
        <div class="comment-header">
            <div class="asset-meta">
<p>
                <span class="byline">
                    

                    <span class="vcard author">Ruan YiFeng</span>

 说：
                </span>
</p>
            </div>
        </div>
        <div class="comment-content" id="comment-quote-205614">
            <blockquote>
<pre>引用fan的发言：</pre>

<p>Dauglas不推荐用new的这种方法构造对象，因为如果忘记加上new，“即没有编译时警告，也没有运行时警告”。他推荐的是函数化的方法，不使用prototype。</p>

</blockquote>

<p>虽然这个意见是正确的。但是，Douglas提出的方法，需要自己写一个函数，在函数里再使用prototype，我觉得很不符合直觉。</p>
        </div>
<div class="comment-footer">
<div class="comment-footer-inner">
<p>
                   <abbr class="published" title="May 18, 2010  9:24 AM">2010年5月18日 09:24</abbr>
 | <a href="http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_encapsulation.html#comment-205614">∞</a>
 | <a href="http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_encapsulation.html#comment-text" title="引用Ruan YiFeng的这条留言" onclick="return CommentQuote(&#39;comment-quote-205614&#39;,&#39;Ruan YiFeng&#39;);">引用</a>
</p>
</div>
</div>
    </div>
</div>
        
    
        
        <div id="comment-205615" class="comment">
    <div class="inner">
        <div class="comment-header">
            <div class="asset-meta">
<p>
                <span class="byline">
                    

                    <span class="vcard author">resun</span>

 说：
                </span>
</p>
            </div>
        </div>
        <div class="comment-content" id="comment-quote-205615">
            <p>很简洁实用的文章，里面有不少重来没有看过的用法,如：alert("name" in cat1); <br>
没想到还能用 in 这样做判断</p>
        </div>
<div class="comment-footer">
<div class="comment-footer-inner">
<p>
                   <abbr class="published" title="May 18, 2010 10:18 AM">2010年5月18日 10:18</abbr>
 | <a href="http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_encapsulation.html#comment-205615">∞</a>
 | <a href="http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_encapsulation.html#comment-text" title="引用resun的这条留言" onclick="return CommentQuote(&#39;comment-quote-205615&#39;,&#39;resun&#39;);">引用</a>
</p>
</div>
</div>
    </div>
</div>
        
    
        
        <div id="comment-205616" class="comment">
    <div class="inner">
        <div class="comment-header">
            <div class="asset-meta">
<p>
                <span class="byline">
                    

                    <span class="vcard author">牙牙学语</span>

 说：
                </span>
</p>
            </div>
        </div>
        <div class="comment-content" id="comment-quote-205616">
            <p>非常实用易懂的文章！<br>
最近看《Object Oriented JavaScript》,看完第六章讲12种对象封装构造的方法，彻底晕菜。。看了您的文章决定继续去读完这本书，的确是本很好的JS参考书啊</p>
        </div>
<div class="comment-footer">
<div class="comment-footer-inner">
<p>
                   <abbr class="published" title="May 18, 2010 11:16 AM">2010年5月18日 11:16</abbr>
 | <a href="http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_encapsulation.html#comment-205616">∞</a>
 | <a href="http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_encapsulation.html#comment-text" title="引用牙牙学语的这条留言" onclick="return CommentQuote(&#39;comment-quote-205616&#39;,&#39;牙牙学语&#39;);">引用</a>
</p>
</div>
</div>
    </div>
</div>
        
    
        
        <div id="comment-205617" class="comment">
    <div class="inner">
        <div class="comment-header">
            <div class="asset-meta">
<p>
                <span class="byline">
                    

                    <span class="vcard author">axu</span>

 说：
                </span>
</p>
            </div>
        </div>
        <div class="comment-content" id="comment-quote-205617">
            <p>这么一段代码，ruan兄猜猜是啥结果？我觉得这是封装中最容易犯的错误<br>
var a=function(){<br>
//empty<br>
}</p>

<p>a.prototype.var1=[1,2,3];</p>

<p>var b=new a();<br>
b.var1.push(4);</p>

<p>var c=new a();<br>
alert(c.var1.join(","))<br>
</p>
        </div>
<div class="comment-footer">
<div class="comment-footer-inner">
<p>
                   <abbr class="published" title="May 18, 2010 11:19 AM">2010年5月18日 11:19</abbr>
 | <a href="http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_encapsulation.html#comment-205617">∞</a>
 | <a href="http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_encapsulation.html#comment-text" title="引用axu的这条留言" onclick="return CommentQuote(&#39;comment-quote-205617&#39;,&#39;axu&#39;);">引用</a>
</p>
</div>
</div>
    </div>
</div>
        
    
        
        <div id="comment-205619" class="comment">
    <div class="inner">
        <div class="comment-header">
            <div class="asset-meta">
<p>
                <span class="byline">
                    

                    <span class="vcard author">Ruan YiFeng</span>

 说：
                </span>
</p>
            </div>
        </div>
        <div class="comment-content" id="comment-quote-205619">
            <blockquote>
<pre>引用axu的发言：</pre>

<p>这么一段代码，ruan兄猜猜是啥结果？我觉得这是封装中最容易犯的错误</p>

</blockquote>

<p>所以只能把不变的属性和方法，绑在prototype对象上，而不能把可变属性绑上去。<br>
</p>
        </div>
<div class="comment-footer">
<div class="comment-footer-inner">
<p>
                   <abbr class="published" title="May 18, 2010  1:31 PM">2010年5月18日 13:31</abbr>
 | <a href="http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_encapsulation.html#comment-205619">∞</a>
 | <a href="http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_encapsulation.html#comment-text" title="引用Ruan YiFeng的这条留言" onclick="return CommentQuote(&#39;comment-quote-205619&#39;,&#39;Ruan YiFeng&#39;);">引用</a>
</p>
</div>
</div>
    </div>
</div>
        
    
        
        <div id="comment-205625" class="comment">
    <div class="inner">
        <div class="comment-header">
            <div class="asset-meta">
<p>
                <span class="byline">
                    

                    <span class="vcard author">清风剑</span>

 说：
                </span>
</p>
            </div>
        </div>
        <div class="comment-content" id="comment-quote-205625">
            <p>我始终觉得javascript是一门函数式编程语言，这种OO的封装应该只是一种临时的workaround</p>
        </div>
<div class="comment-footer">
<div class="comment-footer-inner">
<p>
                   <abbr class="published" title="May 18, 2010  6:21 PM">2010年5月18日 18:21</abbr>
 | <a href="http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_encapsulation.html#comment-205625">∞</a>
 | <a href="http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_encapsulation.html#comment-text" title="引用清风剑的这条留言" onclick="return CommentQuote(&#39;comment-quote-205625&#39;,&#39;清风剑&#39;);">引用</a>
</p>
</div>
</div>
    </div>
</div>
        
    
        
        <div id="comment-205648" class="comment">
    <div class="inner">
        <div class="comment-header">
            <div class="asset-meta">
<p>
                <span class="byline">
                    

                    <span class="vcard author">richard</span>

 说：
                </span>
</p>
            </div>
        </div>
        <div class="comment-content" id="comment-quote-205648">
            <p>这时所有实例的type属性和eat()方法，其实都是一个内存地址，指向prototype对象，因此就提高了运行效率。</p>

<p>也增大了风险，因为一个地方改变了，其他地方都变了。和他带来的好处相比，风险更大，不应该推荐。</p>

<p>ruan兄应该是有点“完美主义”的偏执吧</p>
        </div>
<div class="comment-footer">
<div class="comment-footer-inner">
<p>
                   <abbr class="published" title="May 19, 2010 10:51 AM">2010年5月19日 10:51</abbr>
 | <a href="http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_encapsulation.html#comment-205648">∞</a>
 | <a href="http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_encapsulation.html#comment-text" title="引用richard的这条留言" onclick="return CommentQuote(&#39;comment-quote-205648&#39;,&#39;richard&#39;);">引用</a>
</p>
</div>
</div>
    </div>
</div>
        
    
        
        <div id="comment-205649" class="comment">
    <div class="inner">
        <div class="comment-header">
            <div class="asset-meta">
<p>
                <span class="byline">
                    

                    <span class="vcard author">多志郎</span>

 说：
                </span>
</p>
            </div>
        </div>
        <div class="comment-content" id="comment-quote-205649">
            <p>会不会连载，如果连载的话，就跟着你学了！</p>
        </div>
<div class="comment-footer">
<div class="comment-footer-inner">
<p>
                   <abbr class="published" title="May 19, 2010 11:51 AM">2010年5月19日 11:51</abbr>
 | <a href="http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_encapsulation.html#comment-205649">∞</a>
 | <a href="http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_encapsulation.html#comment-text" title="引用多志郎的这条留言" onclick="return CommentQuote(&#39;comment-quote-205649&#39;,&#39;多志郎&#39;);">引用</a>
</p>
</div>
</div>
    </div>
</div>
        
    
        
        <div id="comment-205710" class="comment">
    <div class="inner">
        <div class="comment-header">
            <div class="asset-meta">
<p>
                <span class="byline">
                    

                    <span class="vcard author"><a title="http://www.ethantsien.com" href="http://www.ethantsien.com/" target="_blank" rel="nofollow">ethantsien</a></span>

 说：
                </span>
</p>
            </div>
        </div>
        <div class="comment-content" id="comment-quote-205710">
            <blockquote>
<pre>引用fan的发言：</pre>

<p>《javascript: the good part》中Dauglas不推荐用new的这种方法构造对象，因为如果忘记加上new，“即没有编译时警告，也没有运行时警告”。他推荐的是函数化的方法，不使用prototype。</p>

</blockquote>

<p>这个“如果“有点苍白</p>
        </div>
<div class="comment-footer">
<div class="comment-footer-inner">
<p>
                   <abbr class="published" title="May 21, 2010  3:51 PM">2010年5月21日 15:51</abbr>
 | <a href="http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_encapsulation.html#comment-205710">∞</a>
 | <a href="http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_encapsulation.html#comment-text" title="引用ethantsien的这条留言" onclick="return CommentQuote(&#39;comment-quote-205710&#39;,&#39;ethantsien&#39;);">引用</a>
</p>
</div>
</div>
    </div>
</div>
        
    
        
        <div id="comment-205715" class="comment">
    <div class="inner">
        <div class="comment-header">
            <div class="asset-meta">
<p>
                <span class="byline">
                    

                    <span class="vcard author">netwjx</span>

 说：
                </span>
</p>
            </div>
        </div>
        <div class="comment-content" id="comment-quote-205715">
            <p>js的水很深很深 特别是用js尝试模仿oo的风格</p>

<p>还是喜欢使用简单的 名称空间+函数</p>
        </div>
<div class="comment-footer">
<div class="comment-footer-inner">
<p>
                   <abbr class="published" title="May 21, 2010  5:20 PM">2010年5月21日 17:20</abbr>
 | <a href="http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_encapsulation.html#comment-205715">∞</a>
 | <a href="http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_encapsulation.html#comment-text" title="引用netwjx的这条留言" onclick="return CommentQuote(&#39;comment-quote-205715&#39;,&#39;netwjx&#39;);">引用</a>
</p>
</div>
</div>
    </div>
</div>
        
    
        
        <div id="comment-205779" class="comment">
    <div class="inner">
        <div class="comment-header">
            <div class="asset-meta">
<p>
                <span class="byline">
                    

                    <span class="vcard author"><a title="http://blog.dotnil.org" href="http://blog.dotnil.org/" target="_blank" rel="nofollow">nil</a></span>

 说：
                </span>
</p>
            </div>
        </div>
        <div class="comment-content" id="comment-quote-205779">
            <blockquote>
<pre>引用ethantsien的发言：</pre>

<p></p>

<p>这个“如果“有点苍白</p>

</blockquote>

<p>苍白与否暂且搁置，为了避免忘记加 new，最好的办法是类名首字母大写。</p>
        </div>
<div class="comment-footer">
<div class="comment-footer-inner">
<p>
                   <abbr class="published" title="May 24, 2010  9:50 AM">2010年5月24日 09:50</abbr>
 | <a href="http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_encapsulation.html#comment-205779">∞</a>
 | <a href="http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_encapsulation.html#comment-text" title="引用nil的这条留言" onclick="return CommentQuote(&#39;comment-quote-205779&#39;,&#39;nil&#39;);">引用</a>
</p>
</div>
</div>
    </div>
</div>
        
    
        
        <div id="comment-206361" class="comment">
    <div class="inner">
        <div class="comment-header">
            <div class="asset-meta">
<p>
                <span class="byline">
                    

                    <span class="vcard author"><a title="http://no" href="http://no/" target="_blank" rel="nofollow">lee</a></span>

 说：
                </span>
</p>
            </div>
        </div>
        <div class="comment-content" id="comment-quote-206361">
            <p>不错！是一篇好文章！<br>
</p>
        </div>
<div class="comment-footer">
<div class="comment-footer-inner">
<p>
                   <abbr class="published" title="June 29, 2010 12:17 PM">2010年6月29日 12:17</abbr>
 | <a href="http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_encapsulation.html#comment-206361">∞</a>
 | <a href="http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_encapsulation.html#comment-text" title="引用lee的这条留言" onclick="return CommentQuote(&#39;comment-quote-206361&#39;,&#39;lee&#39;);">引用</a>
</p>
</div>
</div>
    </div>
</div>
        
    
        
        <div id="comment-206402" class="comment">
    <div class="inner">
        <div class="comment-header">
            <div class="asset-meta">
<p>
                <span class="byline">
                    

                    <span class="vcard author">textbox</span>

 说：
                </span>
</p>
            </div>
        </div>
        <div class="comment-content" id="comment-quote-206402">
            <p>这篇文章绝对要顶，学js多年，像中国唯一一个能把问题讲的这么直白透彻的。</p>
        </div>
<div class="comment-footer">
<div class="comment-footer-inner">
<p>
                   <abbr class="published" title="July  2, 2010 12:59 PM">2010年7月 2日 12:59</abbr>
 | <a href="http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_encapsulation.html#comment-206402">∞</a>
 | <a href="http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_encapsulation.html#comment-text" title="引用textbox的这条留言" onclick="return CommentQuote(&#39;comment-quote-206402&#39;,&#39;textbox&#39;);">引用</a>
</p>
</div>
</div>
    </div>
</div>
        
    
        
        <div id="comment-208940" class="comment">
    <div class="inner">
        <div class="comment-header">
            <div class="asset-meta">
<p>
                <span class="byline">
                    

                    <span class="vcard author"><a title="http://newlinuxjava.javaeye.com/" href="http://newlinuxjava.javaeye.com/" target="_blank" rel="nofollow">bill chen</a></span>

 说：
                </span>
</p>
            </div>
        </div>
        <div class="comment-content" id="comment-quote-208940">
            <p>这篇文章分析得十分仔细清楚，绝对经典啊！！！！</p>
        </div>
<div class="comment-footer">
<div class="comment-footer-inner">
<p>
                   <abbr class="published" title="November 11, 2010 10:11 AM">2010年11月11日 10:11</abbr>
 | <a href="http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_encapsulation.html#comment-208940">∞</a>
 | <a href="http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_encapsulation.html#comment-text" title="引用bill chen的这条留言" onclick="return CommentQuote(&#39;comment-quote-208940&#39;,&#39;bill chen&#39;);">引用</a>
</p>
</div>
</div>
    </div>
</div>
        
    
        
        <div id="comment-210869" class="comment">
    <div class="inner">
        <div class="comment-header">
            <div class="asset-meta">
<p>
                <span class="byline">
                    

                    <span class="vcard author">1w</span>

 说：
                </span>
</p>
            </div>
        </div>
        <div class="comment-content" id="comment-quote-210869">
            <blockquote>
<pre>引用axu的发言：</pre>

<p>这么一段代码，ruan兄猜猜是啥结果？我觉得这是封装中最容易犯的错误<br>
var a=function(){<br>
//empty<br>
}</p>

<p>a.prototype.var1=[1,2,3];</p>

<p>var b=new a();<br>
b.var1.push(4);</p>

<p>var c=new a();<br>
alert(c.var1.join(","))</p>

<p><br>
</p></blockquote><br>
这就涉及到对象的继承机制了. 更直白一点, 涉及到 JS 语言的变量赋值与引用的区分. <br>

        </div>
<div class="comment-footer">
<div class="comment-footer-inner">
<p>
                   <abbr class="published" title="January 12, 2011 10:35 AM">2011年1月12日 10:35</abbr>
 | <a href="http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_encapsulation.html#comment-210869">∞</a>
 | <a href="http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_encapsulation.html#comment-text" title="引用1w的这条留言" onclick="return CommentQuote(&#39;comment-quote-210869&#39;,&#39;1w&#39;);">引用</a>
</p>
</div>
</div>
    </div>
</div>
        
    
        
        <div id="comment-220590" class="comment">
    <div class="inner">
        <div class="comment-header">
            <div class="asset-meta">
<p>
                <span class="byline">
                    

                    <span class="vcard author">czg</span>

 说：
                </span>
</p>
            </div>
        </div>
        <div class="comment-content" id="comment-quote-220590">
            <p>var parent = function(name){<br>
    var that = {};<br>
    that.name = name;<br>
    return that;<br>
};</p>

<p>var child = function(name,age){<br>
    var that = parent(name);<br>
    that.age = age;<br>
    return that;<br>
};</p>

<p>函数化不难</p>
        </div>
<div class="comment-footer">
<div class="comment-footer-inner">
<p>
                   <abbr class="published" title="June  1, 2011 10:16 AM">2011年6月 1日 10:16</abbr>
 | <a href="http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_encapsulation.html#comment-220590">∞</a>
 | <a href="http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_encapsulation.html#comment-text" title="引用czg的这条留言" onclick="return CommentQuote(&#39;comment-quote-220590&#39;,&#39;czg&#39;);">引用</a>
</p>
</div>
</div>
    </div>
</div>
        
    
        
        <div id="comment-221219" class="comment">
    <div class="inner">
        <div class="comment-header">
            <div class="asset-meta">
<p>
                <span class="byline">
                    

                    <span class="vcard author">yisheng</span>

 说：
                </span>
</p>
            </div>
        </div>
        <div class="comment-content" id="comment-quote-221219">
            <p>Ruan兄，  文章易懂，不错，Mark~~~！</p>
        </div>
<div class="comment-footer">
<div class="comment-footer-inner">
<p>
                   <abbr class="published" title="June  9, 2011 11:46 AM">2011年6月 9日 11:46</abbr>
 | <a href="http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_encapsulation.html#comment-221219">∞</a>
 | <a href="http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_encapsulation.html#comment-text" title="引用yisheng的这条留言" onclick="return CommentQuote(&#39;comment-quote-221219&#39;,&#39;yisheng&#39;);">引用</a>
</p>
</div>
</div>
    </div>
</div>
        
    
        
        <div id="comment-221916" class="comment">
    <div class="inner">
        <div class="comment-header">
            <div class="asset-meta">
<p>
                <span class="byline">
                    

                    <span class="vcard author">wells</span>

 说：
                </span>
</p>
            </div>
        </div>
        <div class="comment-content" id="comment-quote-221916">
            <p>第五点应该是构造函数+原型 的混合模式吧。</p>
        </div>
<div class="comment-footer">
<div class="comment-footer-inner">
<p>
                   <abbr class="published" title="June 20, 2011  9:54 AM">2011年6月20日 09:54</abbr>
 | <a href="http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_encapsulation.html#comment-221916">∞</a>
 | <a href="http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_encapsulation.html#comment-text" title="引用wells的这条留言" onclick="return CommentQuote(&#39;comment-quote-221916&#39;,&#39;wells&#39;);">引用</a>
</p>
</div>
</div>
    </div>
</div>
        
    
        
        <div id="comment-222106" class="comment">
    <div class="inner">
        <div class="comment-header">
            <div class="asset-meta">
<p>
                <span class="byline">
                    

                    <span class="vcard author"><a title="http://www.bananawolf.com" href="http://www.bananawolf.com/" target="_blank" rel="nofollow">jaclon</a></span>

 说：
                </span>
</p>
            </div>
        </div>
        <div class="comment-content" id="comment-quote-222106">
            <p>简单易懂，对像我一样的初学者来说很好</p>
        </div>
<div class="comment-footer">
<div class="comment-footer-inner">
<p>
                   <abbr class="published" title="June 21, 2011  5:03 PM">2011年6月21日 17:03</abbr>
 | <a href="http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_encapsulation.html#comment-222106">∞</a>
 | <a href="http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_encapsulation.html#comment-text" title="引用jaclon的这条留言" onclick="return CommentQuote(&#39;comment-quote-222106&#39;,&#39;jaclon&#39;);">引用</a>
</p>
</div>
</div>
    </div>
</div>
        
    
        
        <div id="comment-222320" class="comment">
    <div class="inner">
        <div class="comment-header">
            <div class="asset-meta">
<p>
                <span class="byline">
                    

                    <span class="vcard author">anoymous</span>

 说：
                </span>
</p>
            </div>
        </div>
        <div class="comment-content" id="comment-quote-222320">
            <p>这么入门级的文章，被这么多人“捧”，真够汗的~~</p>
        </div>
<div class="comment-footer">
<div class="comment-footer-inner">
<p>
                   <abbr class="published" title="June 24, 2011 11:33 AM">2011年6月24日 11:33</abbr>
 | <a href="http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_encapsulation.html#comment-222320">∞</a>
 | <a href="http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_encapsulation.html#comment-text" title="引用anoymous的这条留言" onclick="return CommentQuote(&#39;comment-quote-222320&#39;,&#39;anoymous&#39;);">引用</a>
</p>
</div>
</div>
    </div>
</div>
        
    
        
        <div id="comment-222745" class="comment">
    <div class="inner">
        <div class="comment-header">
            <div class="asset-meta">
<p>
                <span class="byline">
                    

                    <span class="vcard author">michael</span>

 说：
                </span>
</p>
            </div>
        </div>
        <div class="comment-content" id="comment-quote-222745">
            <p><br>
好文章，深得深入浅出的精髓<br>
</p>
        </div>
<div class="comment-footer">
<div class="comment-footer-inner">
<p>
                   <abbr class="published" title="July  1, 2011  1:28 PM">2011年7月 1日 13:28</abbr>
 | <a href="http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_encapsulation.html#comment-222745">∞</a>
 | <a href="http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_encapsulation.html#comment-text" title="引用michael的这条留言" onclick="return CommentQuote(&#39;comment-quote-222745&#39;,&#39;michael&#39;);">引用</a>
</p>
</div>
</div>
    </div>
</div>
        
    
        
        <div id="comment-223417" class="comment">
    <div class="inner">
        <div class="comment-header">
            <div class="asset-meta">
<p>
                <span class="byline">
                    

                    <span class="vcard author">初学者</span>

 说：
                </span>
</p>
            </div>
        </div>
        <div class="comment-content" id="comment-quote-223417">
            <p>我个人认为：javascript 只是脚本语言，它和c++或java等语言所肩负的任务不同， 因此关于“继承”等功能不是重点,无需太复杂。<br>
我不赞同依靠javascript大量创建UI界面，构建UI的基础应该是html+css。<br>
当然javascript也可以写得很复杂和高明，那是高手们喜欢做的事。但不代表非要这样不可。<br>
现在的电脑设备速度越来越快，内存越来越大，无需太计较，简单易懂、安全（prototype的做法易出错,风险大，使用时要很小心。）才是重点。</p>
        </div>
<div class="comment-footer">
<div class="comment-footer-inner">
<p>
                   <abbr class="published" title="July 10, 2011  1:18 PM">2011年7月10日 13:18</abbr>
 | <a href="http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_encapsulation.html#comment-223417">∞</a>
 | <a href="http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_encapsulation.html#comment-text" title="引用初学者的这条留言" onclick="return CommentQuote(&#39;comment-quote-223417&#39;,&#39;初学者&#39;);">引用</a>
</p>
</div>
</div>
    </div>
</div>
        
    
        
        <div id="comment-224096" class="comment">
    <div class="inner">
        <div class="comment-header">
            <div class="asset-meta">
<p>
                <span class="byline">
                    

                    <span class="vcard author">argb</span>

 说：
                </span>
</p>
            </div>
        </div>
        <div class="comment-content" id="comment-quote-224096">
            <p>Javascript是一种基于对象（object-based）的语言，你遇到的所有东西几乎都是对象。但是，它又不是一种真正的面向对象编程（OOP）语言，因为它的语法中没有class（类）。</p>

<p>不明白为什么这么说，没有class就不是真正的面向对象？面向对象是一种编程思想，有没有class只是一种对这种思想的具体实现与体现，但没有class也未必不是面向对象。</p>

<p><br>
ecmascript规范里如是说：<br>
ECMAScript is an object-oriented programming language for performing computations and manipulating computational objects within a host environment.</p>

<p>----Ecmascript262 v5 page 1</p>
        </div>
<div class="comment-footer">
<div class="comment-footer-inner">
<p>
                   <abbr class="published" title="July 20, 2011  4:28 PM">2011年7月20日 16:28</abbr>
 | <a href="http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_encapsulation.html#comment-224096">∞</a>
 | <a href="http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_encapsulation.html#comment-text" title="引用argb的这条留言" onclick="return CommentQuote(&#39;comment-quote-224096&#39;,&#39;argb&#39;);">引用</a>
</p>
</div>
</div>
    </div>
</div>
        
    
        
        <div id="comment-224363" class="comment">
    <div class="inner">
        <div class="comment-header">
            <div class="asset-meta">
<p>
                <span class="byline">
                    

                    <span class="vcard author">forget</span>

 说：
                </span>
</p>
            </div>
        </div>
        <div class="comment-content" id="comment-quote-224363">
            <p>初学者看了您的文章受益匪浅,已经购买推荐的书籍正在学习中.感谢...</p>
        </div>
<div class="comment-footer">
<div class="comment-footer-inner">
<p>
                   <abbr class="published" title="July 25, 2011  2:48 PM">2011年7月25日 14:48</abbr>
 | <a href="http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_encapsulation.html#comment-224363">∞</a>
 | <a href="http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_encapsulation.html#comment-text" title="引用forget的这条留言" onclick="return CommentQuote(&#39;comment-quote-224363&#39;,&#39;forget&#39;);">引用</a>
</p>
</div>
</div>
    </div>
</div>
        
    
        
        <div id="comment-224623" class="comment">
    <div class="inner">
        <div class="comment-header">
            <div class="asset-meta">
<p>
                <span class="byline">
                    

                    <span class="vcard author">Ora</span>

 说：
                </span>
</p>
            </div>
        </div>
        <div class="comment-content" id="comment-quote-224623">
            <p>第5部分里的 alert(cat1.eat == cat2.eat);  是否改为===更恰当些？</p>
        </div>
<div class="comment-footer">
<div class="comment-footer-inner">
<p>
                   <abbr class="published" title="July 29, 2011  3:49 PM">2011年7月29日 15:49</abbr>
 | <a href="http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_encapsulation.html#comment-224623">∞</a>
 | <a href="http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_encapsulation.html#comment-text" title="引用Ora的这条留言" onclick="return CommentQuote(&#39;comment-quote-224623&#39;,&#39;Ora&#39;);">引用</a>
</p>
</div>
</div>
    </div>
</div>
        
    
        
        <div id="comment-224868" class="comment">
    <div class="inner">
        <div class="comment-header">
            <div class="asset-meta">
<p>
                <span class="byline">
                    

                    <span class="vcard author">胡营</span>

 说：
                </span>
</p>
            </div>
        </div>
        <div class="comment-content" id="comment-quote-224868">
            <p>看了几个星期的书，还不如看着几个例子，浅显易懂！</p>
        </div>
<div class="comment-footer">
<div class="comment-footer-inner">
<p>
                   <abbr class="published" title="August  2, 2011  3:44 PM">2011年8月 2日 15:44</abbr>
 | <a href="http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_encapsulation.html#comment-224868">∞</a>
 | <a href="http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_encapsulation.html#comment-text" title="引用胡营的这条留言" onclick="return CommentQuote(&#39;comment-quote-224868&#39;,&#39;胡营&#39;);">引用</a>
</p>
</div>
</div>
    </div>
</div>
        
    
        
        <div id="comment-240985" class="comment">
    <div class="inner">
        <div class="comment-header">
            <div class="asset-meta">
<p>
                <span class="byline">
                    

                    <span class="vcard author"><a title="http://www.iyoya.com" href="http://www.iyoya.com/" target="_blank" rel="nofollow">Yoya</a></span>

 说：
                </span>
</p>
            </div>
        </div>
        <div class="comment-content" id="comment-quote-240985">
            <p>OOP的人看JS真的是很变恋，你说Cat.prototype.type = "猫科动物";这个东西看上去像模仿类的静态方法吧，但访问时又不是直接通过类而是通过类的实例cat1.type；。这让初学编程的人是学面向过程还是面向对向啊？</p>
        </div>
<div class="comment-footer">
<div class="comment-footer-inner">
<p>
                   <abbr class="published" title="November 29, 2011  5:36 PM">2011年11月29日 17:36</abbr>
 | <a href="http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_encapsulation.html#comment-240985">∞</a>
 | <a href="http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_encapsulation.html#comment-text" title="引用Yoya的这条留言" onclick="return CommentQuote(&#39;comment-quote-240985&#39;,&#39;Yoya&#39;);">引用</a>
</p>
</div>
</div>
    </div>
</div>
        
    
        
        <div id="comment-243348" class="comment">
    <div class="inner">
        <div class="comment-header">
            <div class="asset-meta">
<p>
                <span class="byline">
                    

                    <span class="vcard author">xxx</span>

 说：
                </span>
</p>
            </div>
        </div>
        <div class="comment-content" id="comment-quote-243348">
            <blockquote>
<pre>引用Yoya的发言：</pre>
OOP的人看JS真的是很变恋，你说Cat.prototype.type = "猫科动物";这个东西看上去像模仿类的静态方法吧，但访问时又不是直接通过类而是通过类的实例cat1.type；。这让初学编程的人是学面向过程还是面向对向啊？
</blockquote>

<p>访问时通过类或是通过类的实例不能作为判断是否面向对象的依据，其实都是访问一块公共内存而已</p>
        </div>
<div class="comment-footer">
<div class="comment-footer-inner">
<p>
                   <abbr class="published" title="December 25, 2011  9:35 PM">2011年12月25日 21:35</abbr>
 | <a href="http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_encapsulation.html#comment-243348">∞</a>
 | <a href="http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_encapsulation.html#comment-text" title="引用xxx的这条留言" onclick="return CommentQuote(&#39;comment-quote-243348&#39;,&#39;xxx&#39;);">引用</a>
</p>
</div>
</div>
    </div>
</div>
        
    
        
        <div id="comment-243618" class="comment">
    <div class="inner">
        <div class="comment-header">
            <div class="asset-meta">
<p>
                <span class="byline">
                    

                    <span class="vcard author">Azrael</span>

 说：
                </span>
</p>
            </div>
        </div>
        <div class="comment-content" id="comment-quote-243618">
            <p>我的问题跟Yoya的一样 ，OOP的人看JS真的是很变恋，你说Cat.prototype.type = "猫科动物";这个东西看上去像模仿类的静态方法吧，但访问时又不是直接通过类而是通过类的实例cat1.type；搞不清楚到底是不是共享的了</p>
        </div>
<div class="comment-footer">
<div class="comment-footer-inner">
<p>
                   <abbr class="published" title="December 28, 2011  9:48 AM">2011年12月28日 09:48</abbr>
 | <a href="http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_encapsulation.html#comment-243618">∞</a>
 | <a href="http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_encapsulation.html#comment-text" title="引用Azrael的这条留言" onclick="return CommentQuote(&#39;comment-quote-243618&#39;,&#39;Azrael&#39;);">引用</a>
</p>
</div>
</div>
    </div>
</div>
        
    
        
        <div id="comment-248220" class="comment">
    <div class="inner">
        <div class="comment-header">
            <div class="asset-meta">
<p>
                <span class="byline">
                    

                    <span class="vcard author">xyz</span>

 说：
                </span>
</p>
            </div>
        </div>
        <div class="comment-content" id="comment-quote-248220">
            <p>循序渐进 适合学习</p>
        </div>
<div class="comment-footer">
<div class="comment-footer-inner">
<p>
                   <abbr class="published" title="February 14, 2012 12:31 PM">2012年2月14日 12:31</abbr>
 | <a href="http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_encapsulation.html#comment-248220">∞</a>
 | <a href="http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_encapsulation.html#comment-text" title="引用xyz的这条留言" onclick="return CommentQuote(&#39;comment-quote-248220&#39;,&#39;xyz&#39;);">引用</a>
</p>
</div>
</div>
    </div>
</div>
        
    
        
        <div id="comment-248794" class="comment">
    <div class="inner">
        <div class="comment-header">
            <div class="asset-meta">
<p>
                <span class="byline">
                    

                    <span class="vcard author">Dada</span>

 说：
                </span>
</p>
            </div>
        </div>
        <div class="comment-content" id="comment-quote-248794">
            <p>function Cat(name,color){<br>
　　　　this.name = name;<br>
　　　　this.color = color;<br>
　　}<br>
　　Cat.prototype.type = "猫科动物";<br>
　　Cat.prototype.eat = function(){alert("吃老鼠")};</p>

<p>var cat1 = new Cat("大毛","黄色");<br>
　　var cat2 = new Cat ("二毛","黑色");<br>
　　alert(cat1.type); // 猫科动物</p>

<p>这里两个对象的type显然不是一个内存地址，可以写一个代码跑一下啊，我试了，不再同一内存地址，如果在同一内存地址不就成了静态变量。</p>
        </div>
<div class="comment-footer">
<div class="comment-footer-inner">
<p>
                   <abbr class="published" title="February 20, 2012  4:51 PM">2012年2月20日 16:51</abbr>
 | <a href="http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_encapsulation.html#comment-248794">∞</a>
 | <a href="http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_encapsulation.html#comment-text" title="引用Dada的这条留言" onclick="return CommentQuote(&#39;comment-quote-248794&#39;,&#39;Dada&#39;);">引用</a>
</p>
</div>
</div>
    </div>
</div>
        
    
        
        <div id="comment-248796" class="comment">
    <div class="inner">
        <div class="comment-header">
            <div class="asset-meta">
<p>
                <span class="byline">
                    

                    <span class="vcard author">Dada</span>

 说：
                </span>
</p>
            </div>
        </div>
        <div class="comment-content" id="comment-quote-248796">
            <blockquote>
<pre>引用Dada的发言：</pre>

<p>function Cat(name,color){<br>
　　　　this.name = name;<br>
　　　　this.color = color;<br>
　　}<br>
　　Cat.prototype.type = "猫科动物";<br>
　　Cat.prototype.eat = function(){alert("吃老鼠")};</p>

<p>var cat1 = new Cat("大毛","黄色");<br>
　　var cat2 = new Cat ("二毛","黑色");<br>
　　alert(cat1.type); // 猫科动物</p>

<p>这里两个对象的type显然不是一个内存地址，可以写一个代码跑一下啊，我试了，不再同一内存地址，如果在同一内存地址不就成了静态变量。</p>

</blockquote>

<p>刚才我说的也不准确，下面是摘自一个博客，我感觉挺准确的，你文章里写的有点歧义，容易让人以为prototype中所定的属性是静态方法。</p>

<p>话说每一个方法对象被创建时，都会自动的拥有一个叫 prototype 的属性。这个属性并无什么特别之处，它和其他的属性一样可以访问，可以赋值。不过当我们用 new 关键字来创建一个对象的时候，prototype 就起作用了：它的值（也是一个对象）所包含的所有属性，都会被复制到新创建的那个对象上去。</p>
        </div>
<div class="comment-footer">
<div class="comment-footer-inner">
<p>
                   <abbr class="published" title="February 20, 2012  5:15 PM">2012年2月20日 17:15</abbr>
 | <a href="http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_encapsulation.html#comment-248796">∞</a>
 | <a href="http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_encapsulation.html#comment-text" title="引用Dada的这条留言" onclick="return CommentQuote(&#39;comment-quote-248796&#39;,&#39;Dada&#39;);">引用</a>
</p>
</div>
</div>
    </div>
</div>
        
    
        
        <div id="comment-248889" class="comment">
    <div class="inner">
        <div class="comment-header">
            <div class="asset-meta">
<p>
                <span class="byline">
                    

                    <span class="vcard author">Dada</span>

 说：
                </span>
</p>
            </div>
        </div>
        <div class="comment-content" id="comment-quote-248889">
            <p>我昨天的留言，感觉太草率了，今天又读了一些，发现博主说的还是比较准确的，虽然给我造成了一定的误解，不过博主说还是对的，我上面说的那个根本不正确。。。。</p>
        </div>
<div class="comment-footer">
<div class="comment-footer-inner">
<p>
                   <abbr class="published" title="February 21, 2012  2:43 PM">2012年2月21日 14:43</abbr>
 | <a href="http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_encapsulation.html#comment-248889">∞</a>
 | <a href="http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_encapsulation.html#comment-text" title="引用Dada的这条留言" onclick="return CommentQuote(&#39;comment-quote-248889&#39;,&#39;Dada&#39;);">引用</a>
</p>
</div>
</div>
    </div>
</div>
        
    
        
        <div id="comment-248970" class="comment">
    <div class="inner">
        <div class="comment-header">
            <div class="asset-meta">
<p>
                <span class="byline">
                    

                    <span class="vcard author">Zz</span>

 说：
                </span>
</p>
            </div>
        </div>
        <div class="comment-content" id="comment-quote-248970">
            <p>阮大哥，你这篇刚刚写出来的时候我就看过了，当时看了半天没看懂，直到今天才看懂，我是个超级初级入门者，入门了两年啊，哈哈哈，我实在是太笨了。</p>

<p>谢谢你，终于看明白了，而且原来是那么的浅显易懂啊</p>
        </div>
<div class="comment-footer">
<div class="comment-footer-inner">
<p>
                   <abbr class="published" title="February 22, 2012 10:06 AM">2012年2月22日 10:06</abbr>
 | <a href="http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_encapsulation.html#comment-248970">∞</a>
 | <a href="http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_encapsulation.html#comment-text" title="引用Zz的这条留言" onclick="return CommentQuote(&#39;comment-quote-248970&#39;,&#39;Zz&#39;);">引用</a>
</p>
</div>
</div>
    </div>
</div>
        
    
        
        <div id="comment-249458" class="comment">
    <div class="inner">
        <div class="comment-header">
            <div class="asset-meta">
<p>
                <span class="byline">
                    

                    <span class="vcard author">路街道</span>

 说：
                </span>
</p>
            </div>
        </div>
        <div class="comment-content" id="comment-quote-249458">
            <p>阮老大，javascript现在面相对象编程是一个大趋势啊。我搜遍了国内的网上书店都没有买到将关于javascript面相对象编程的书籍。国内的专家写的什么垃圾书，在就过时了。javascript面相对象的时代到来了。封住继承是必须的了。求javascript面相对象的书啊。。网上就您的这几篇稿子经典，跪添了。</p>
        </div>
<div class="comment-footer">
<div class="comment-footer-inner">
<p>
                   <abbr class="published" title="February 28, 2012  4:01 PM">2012年2月28日 16:01</abbr>
 | <a href="http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_encapsulation.html#comment-249458">∞</a>
 | <a href="http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_encapsulation.html#comment-text" title="引用路街道的这条留言" onclick="return CommentQuote(&#39;comment-quote-249458&#39;,&#39;路街道&#39;);">引用</a>
</p>
</div>
</div>
    </div>
</div>
        
    
        
        <div id="comment-249926" class="comment">
    <div class="inner">
        <div class="comment-header">
            <div class="asset-meta">
<p>
                <span class="byline">
                    

                    <span class="vcard author">shuiren</span>

 说：
                </span>
</p>
            </div>
        </div>
        <div class="comment-content" id="comment-quote-249926">
            <blockquote>
<pre>引用Azrael的发言：</pre>

<p>我的问题跟Yoya的一样 ，OOP的人看JS真的是很变恋，你说Cat.prototype.type = "猫科动物";这个东西看上去像模仿类的静态方法吧，但访问时又不是直接通过类而是通过类的实例cat1.type；搞不清楚到底是不是共享的了</p>

</blockquote>

<p>所以，我是不喜欢这个风格。<br>
特别是，这种风格带来的如果只是内存节约的话</p>
        </div>
<div class="comment-footer">
<div class="comment-footer-inner">
<p>
                   <abbr class="published" title="March  7, 2012 10:58 AM">2012年3月 7日 10:58</abbr>
 | <a href="http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_encapsulation.html#comment-249926">∞</a>
 | <a href="http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_encapsulation.html#comment-text" title="引用shuiren的这条留言" onclick="return CommentQuote(&#39;comment-quote-249926&#39;,&#39;shuiren&#39;);">引用</a>
</p>
</div>
</div>
    </div>
</div>
        
    
        
        <div id="comment-250531" class="comment">
    <div class="inner">
        <div class="comment-header">
            <div class="asset-meta">
<p>
                <span class="byline">
                    

                    <span class="vcard author">lovejjhao</span>

 说：
                </span>
</p>
            </div>
        </div>
        <div class="comment-content" id="comment-quote-250531">
            <p>文章非常好，加深理解！！！感谢作者！</p>
        </div>
<div class="comment-footer">
<div class="comment-footer-inner">
<p>
                   <abbr class="published" title="March 15, 2012 11:14 AM">2012年3月15日 11:14</abbr>
 | <a href="http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_encapsulation.html#comment-250531">∞</a>
 | <a href="http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_encapsulation.html#comment-text" title="引用lovejjhao的这条留言" onclick="return CommentQuote(&#39;comment-quote-250531&#39;,&#39;lovejjhao&#39;);">引用</a>
</p>
</div>
</div>
    </div>
</div>
        
    
        
        <div id="comment-255213" class="comment">
    <div class="inner">
        <div class="comment-header">
            <div class="asset-meta">
<p>
                <span class="byline">
                    

                    <span class="vcard author">zhaoyou</span>

 说：
                </span>
</p>
            </div>
        </div>
        <div class="comment-content" id="comment-quote-255213">
            <blockquote>
<pre>引用Ruan YiFeng的发言：</pre>

<p></p>

<p>所以只能把不变的属性和方法，绑在prototype对象上，而不能把可变属性绑上去。</p>

<p><br>
</p></blockquote><br>
从原型拿来的东西，只是能查询，检索到，更新不会影响到原型的值。这样理解好些？
        </div>
<div class="comment-footer">
<div class="comment-footer-inner">
<p>
                   <abbr class="published" title="May 21, 2012 11:13 PM">2012年5月21日 23:13</abbr>
 | <a href="http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_encapsulation.html#comment-255213">∞</a>
 | <a href="http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_encapsulation.html#comment-text" title="引用zhaoyou的这条留言" onclick="return CommentQuote(&#39;comment-quote-255213&#39;,&#39;zhaoyou&#39;);">引用</a>
</p>
</div>
</div>
    </div>
</div>
        
    
        
        <div id="comment-258553" class="comment">
    <div class="inner">
        <div class="comment-header">
            <div class="asset-meta">
<p>
                <span class="byline">
                    

                    <span class="vcard author"><a title="http://weibo.com/tyforever1987" href="http://weibo.com/tyforever1987" target="_blank" rel="nofollow">那个妹子</a></span>

 说：
                </span>
</p>
            </div>
        </div>
        <div class="comment-content" id="comment-quote-258553">
            <p>很好懂，谢谢啦！</p>
        </div>
<div class="comment-footer">
<div class="comment-footer-inner">
<p>
                   <abbr class="published" title="July 11, 2012  9:42 PM">2012年7月11日 21:42</abbr>
 | <a href="http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_encapsulation.html#comment-258553">∞</a>
 | <a href="http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_encapsulation.html#comment-text" title="引用那个妹子的这条留言" onclick="return CommentQuote(&#39;comment-quote-258553&#39;,&#39;那个妹子&#39;);">引用</a>
</p>
</div>
</div>
    </div>
</div>
        
    
        
        <div id="comment-258575" class="comment">
    <div class="inner">
        <div class="comment-header">
            <div class="asset-meta">
<p>
                <span class="byline">
                    

                    <span class="vcard author">Hodor</span>

 说：
                </span>
</p>
            </div>
        </div>
        <div class="comment-content" id="comment-quote-258575">
            <blockquote>
<pre>引用ethantsien的发言：</pre>

<p></p>

<p>这个“如果“有点苍白</p>

</blockquote>
苍白+1

        </div>
<div class="comment-footer">
<div class="comment-footer-inner">
<p>
                   <abbr class="published" title="July 12, 2012 10:06 AM">2012年7月12日 10:06</abbr>
 | <a href="http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_encapsulation.html#comment-258575">∞</a>
 | <a href="http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_encapsulation.html#comment-text" title="引用Hodor的这条留言" onclick="return CommentQuote(&#39;comment-quote-258575&#39;,&#39;Hodor&#39;);">引用</a>
</p>
</div>
</div>
    </div>
</div>
        
    
        
        <div id="comment-258850" class="comment">
    <div class="inner">
        <div class="comment-header">
            <div class="asset-meta">
<p>
                <span class="byline">
                    

                    <span class="vcard author">赵荣娇</span>

 说：
                </span>
</p>
            </div>
        </div>
        <div class="comment-content" id="comment-quote-258850">
            <p>Cat.prototype.isPrototypeOf(cat1)//true——原来构造函数的原型才是与实例的原型一致，也就是说<b>原型一致</b>；<br>
Cat.constructor == cat1.constructor //false——不知道为什么构造函数与构造函数为什么不一致？<br>
Cat == cat1.constructor //true</p>
        </div>
<div class="comment-footer">
<div class="comment-footer-inner">
<p>
                   <abbr class="published" title="July 17, 2012 11:39 AM">2012年7月17日 11:39</abbr>
 | <a href="http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_encapsulation.html#comment-258850">∞</a>
 | <a href="http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_encapsulation.html#comment-text" title="引用赵荣娇的这条留言" onclick="return CommentQuote(&#39;comment-quote-258850&#39;,&#39;赵荣娇&#39;);">引用</a>
</p>
</div>
</div>
    </div>
</div>
        
    
        
        <div id="comment-261116" class="comment">
    <div class="inner">
        <div class="comment-header">
            <div class="asset-meta">
<p>
                <span class="byline">
                    

                    <span class="vcard author">iliveido</span>

 说：
                </span>
</p>
            </div>
        </div>
        <div class="comment-content" id="comment-quote-261116">
            <p>Cat和cat1都有两个子对象：constructor和prototype<br>
cat1.constructor就是Cat<br>
cat1.prototype就是Cat.prototype<br>
问题是,Cat的另一个子对象Cat.constructor是什么呢？</p>
        </div>
<div class="comment-footer">
<div class="comment-footer-inner">
<p>
                   <abbr class="published" title="August 11, 2012 11:57 PM">2012年8月11日 23:57</abbr>
 | <a href="http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_encapsulation.html#comment-261116">∞</a>
 | <a href="http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_encapsulation.html#comment-text" title="引用iliveido的这条留言" onclick="return CommentQuote(&#39;comment-quote-261116&#39;,&#39;iliveido&#39;);">引用</a>
</p>
</div>
</div>
    </div>
</div>
        
    
        
        <div id="comment-262877" class="comment">
    <div class="inner">
        <div class="comment-header">
            <div class="asset-meta">
<p>
                <span class="byline">
                    

                    <span class="vcard author"><a title="http://lazy2009.iteye.com" href="http://lazy2009.iteye.com/" target="_blank" rel="nofollow">lazy2009.iteye.com</a></span>

 说：
                </span>
</p>
            </div>
        </div>
        <div class="comment-content" id="comment-quote-262877">
            <p>[QUOTE]<br>
我们现在就可以生成实例对象了。<br>
　　var cat1 = new Cat("大毛","黄色");<br>
　　var cat2 = new Cat("二毛","黑色");<br>
　　alert(cat1.name); // 大毛<br>
　　alert(cat1.color); // 黄色<br>
这时cat1和cat2会自动含有一个constructor属性，指向它们的构造函数。<br>
　　alert(cat1.constructor == Cat); //true<br>
　　alert(cat2.constructor == Cat); //true<br>
[/QUOTE]<br>
----------------------------------<br>
cat1和cat2自身是没有constructor属性的，而是通过原型链找到Cat.prototype.constructor属性</p>
        </div>
<div class="comment-footer">
<div class="comment-footer-inner">
<p>
                   <abbr class="published" title="September  6, 2012  8:41 AM">2012年9月 6日 08:41</abbr>
 | <a href="http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_encapsulation.html#comment-262877">∞</a>
 | <a href="http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_encapsulation.html#comment-text" title="引用lazy2009.iteye.com的这条留言" onclick="return CommentQuote(&#39;comment-quote-262877&#39;,&#39;lazy2009.iteye.com&#39;);">引用</a>
</p>
</div>
</div>
    </div>
</div>
        
    
        
        <div id="comment-263769" class="comment">
    <div class="inner">
        <div class="comment-header">
            <div class="asset-meta">
<p>
                <span class="byline">
                    

                    <span class="vcard author"><a title="http://no" href="http://no/" target="_blank" rel="nofollow">eagle</a></span>

 说：
                </span>
</p>
            </div>
        </div>
        <div class="comment-content" id="comment-quote-263769">
            <p>　alert(cat1.eat == cat2.eat); //false</p>

<p>为什么这一句我测试的结果是true？</p>
        </div>
<div class="comment-footer">
<div class="comment-footer-inner">
<p>
                   <abbr class="published" title="September 22, 2012  4:13 PM">2012年9月22日 16:13</abbr>
 | <a href="http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_encapsulation.html#comment-263769">∞</a>
 | <a href="http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_encapsulation.html#comment-text" title="引用eagle的这条留言" onclick="return CommentQuote(&#39;comment-quote-263769&#39;,&#39;eagle&#39;);">引用</a>
</p>
</div>
</div>
    </div>
</div>
        
    
        
        <div id="comment-263892" class="comment">
    <div class="inner">
        <div class="comment-header">
            <div class="asset-meta">
<p>
                <span class="byline">
                    

                    <span class="vcard author"><a title="http://xiaoxiehang.h5.5vv.cc" href="http://xiaoxiehang.h5.5vv.cc/" target="_blank" rel="nofollow">xiaoxiehang</a></span>

 说：
                </span>
</p>
            </div>
        </div>
        <div class="comment-content" id="comment-quote-263892">
            <p>阮哥   前面都看的懂了    但是最后一句不太明白<br>
for(var prop in cat1) { alert("cat1["+prop+"]="+cat1[prop]); }<br>
希望你能解释一下</p>
        </div>
<div class="comment-footer">
<div class="comment-footer-inner">
<p>
                   <abbr class="published" title="September 25, 2012  5:54 PM">2012年9月25日 17:54</abbr>
 | <a href="http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_encapsulation.html#comment-263892">∞</a>
 | <a href="http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_encapsulation.html#comment-text" title="引用xiaoxiehang的这条留言" onclick="return CommentQuote(&#39;comment-quote-263892&#39;,&#39;xiaoxiehang&#39;);">引用</a>
</p>
</div>
</div>
    </div>
</div>
        
    
        
        <div id="comment-266625" class="comment">
    <div class="inner">
        <div class="comment-header">
            <div class="asset-meta">
<p>
                <span class="byline">
                    

                    <span class="vcard author">beebe</span>

 说：
                </span>
</p>
            </div>
        </div>
        <div class="comment-content" id="comment-quote-266625">
            <p>果然是你写的.....</p>
        </div>
<div class="comment-footer">
<div class="comment-footer-inner">
<p>
                   <abbr class="published" title="December  3, 2012  9:17 PM">2012年12月 3日 21:17</abbr>
 | <a href="http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_encapsulation.html#comment-266625">∞</a>
 | <a href="http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_encapsulation.html#comment-text" title="引用beebe的这条留言" onclick="return CommentQuote(&#39;comment-quote-266625&#39;,&#39;beebe&#39;);">引用</a>
</p>
</div>
</div>
    </div>
</div>
        
    
        
        <div id="comment-269359" class="comment">
    <div class="inner">
        <div class="comment-header">
            <div class="asset-meta">
<p>
                <span class="byline">
                    

                    <span class="vcard author">路人甲</span>

 说：
                </span>
</p>
            </div>
        </div>
        <div class="comment-content" id="comment-quote-269359">
            <p>我擦，评论好多见解是错的。。。把原型链先搞清楚就不会错了</p>
        </div>
<div class="comment-footer">
<div class="comment-footer-inner">
<p>
                   <abbr class="published" title="March  5, 2013  1:03 PM">2013年3月 5日 13:03</abbr>
 | <a href="http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_encapsulation.html#comment-269359">∞</a>
 | <a href="http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_encapsulation.html#comment-text" title="引用路人甲的这条留言" onclick="return CommentQuote(&#39;comment-quote-269359&#39;,&#39;路人甲&#39;);">引用</a>
</p>
</div>
</div>
    </div>
</div>
        
    
        
        <div id="comment-271517" class="comment">
    <div class="inner">
        <div class="comment-header">
            <div class="asset-meta">
<p>
                <span class="byline">
                    

                    <span class="vcard author">杨易</span>

 说：
                </span>
</p>
            </div>
        </div>
        <div class="comment-content" id="comment-quote-271517">
            <p>Prototype模式 还有一点没有说到,<br>
className.Prototype.method(){<br>
//这里不能使用构造里的私有属性<br>
}</p>
        </div>
<div class="comment-footer">
<div class="comment-footer-inner">
<p>
                   <abbr class="published" title="May 14, 2013 12:00 PM">2013年5月14日 12:00</abbr>
 | <a href="http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_encapsulation.html#comment-271517">∞</a>
 | <a href="http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_encapsulation.html#comment-text" title="引用杨易的这条留言" onclick="return CommentQuote(&#39;comment-quote-271517&#39;,&#39;杨易&#39;);">引用</a>
</p>
</div>
</div>
    </div>
</div>
        
    
        
        <div id="comment-272465" class="comment">
    <div class="inner">
        <div class="comment-header">
            <div class="asset-meta">
<p>
                <span class="byline">
                    

                    <span class="vcard author"><a title="https://github.com/phplaber" href="https://github.com/phplaber" target="_blank" rel="nofollow">phplaber</a></span>

 说：
                </span>
</p>
            </div>
        </div>
        <div class="comment-content" id="comment-quote-272465">
            <p>Prototype模式虽然能减少内存使用，提高应用性能，但是会使代码变得冗长，增加维护难度。更好的做法应该是使用“继承”的方法，将相同的属性和方法封装在另外的对象中。</p>
        </div>
<div class="comment-footer">
<div class="comment-footer-inner">
<p>
                   <abbr class="published" title="July  2, 2013  7:09 PM">2013年7月 2日 19:09</abbr>
 | <a href="http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_encapsulation.html#comment-272465">∞</a>
 | <a href="http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_encapsulation.html#comment-text" title="引用phplaber的这条留言" onclick="return CommentQuote(&#39;comment-quote-272465&#39;,&#39;phplaber&#39;);">引用</a>
</p>
</div>
</div>
    </div>
</div>
        
    
        
        <div id="comment-272747" class="comment">
    <div class="inner">
        <div class="comment-header">
            <div class="asset-meta">
<p>
                <span class="byline">
                    

                    <span class="vcard author">fn_c</span>

 说：
                </span>
</p>
            </div>
        </div>
        <div class="comment-content" id="comment-quote-272747">
            <p>console.log(cat1.type == cat2.type);  和 console.log(cat1.type === cat2.type);<br>
返回的都是 true，求解惑</p>
        </div>
<div class="comment-footer">
<div class="comment-footer-inner">
<p>
                   <abbr class="published" title="July 19, 2013 11:59 AM">2013年7月19日 11:59</abbr>
 | <a href="http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_encapsulation.html#comment-272747">∞</a>
 | <a href="http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_encapsulation.html#comment-text" title="引用fn_c的这条留言" onclick="return CommentQuote(&#39;comment-quote-272747&#39;,&#39;fn_c&#39;);">引用</a>
</p>
</div>
</div>
    </div>
</div>
        
    
        
        <div id="comment-272806" class="comment">
    <div class="inner">
        <div class="comment-header">
            <div class="asset-meta">
<p>
                <span class="byline">
                    

                    <span class="vcard author">东方小白</span>

 说：
                </span>
</p>
            </div>
        </div>
        <div class="comment-content" id="comment-quote-272806">
            <p>终于懂了prototype了</p>
        </div>
<div class="comment-footer">
<div class="comment-footer-inner">
<p>
                   <abbr class="published" title="July 25, 2013 10:39 AM">2013年7月25日 10:39</abbr>
 | <a href="http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_encapsulation.html#comment-272806">∞</a>
 | <a href="http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_encapsulation.html#comment-text" title="引用东方小白的这条留言" onclick="return CommentQuote(&#39;comment-quote-272806&#39;,&#39;东方小白&#39;);">引用</a>
</p>
</div>
</div>
    </div>
</div>
        
    
        
        <div id="comment-273250" class="comment">
    <div class="inner">
        <div class="comment-header">
            <div class="asset-meta">
<p>
                <span class="byline">
                    

                    <span class="vcard author">雅蠛蝶</span>

 说：
                </span>
</p>
            </div>
        </div>
        <div class="comment-content" id="comment-quote-273250">
            <blockquote>
<pre>引用eagle的发言：</pre>

<p>　alert(cat1.eat == cat2.eat); //false</p>

<p>为什么这一句我测试的结果是true？</p>

</blockquote>

<p>alert(cat1.eat == cat2.eat); //false<br>
alert(cat1.eat() == cat2.eat()); //true</p>
        </div>
<div class="comment-footer">
<div class="comment-footer-inner">
<p>
                   <abbr class="published" title="August 25, 2013 11:35 PM">2013年8月25日 23:35</abbr>
 | <a href="http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_encapsulation.html#comment-273250">∞</a>
 | <a href="http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_encapsulation.html#comment-text" title="引用雅蠛蝶的这条留言" onclick="return CommentQuote(&#39;comment-quote-273250&#39;,&#39;雅蠛蝶&#39;);">引用</a>
</p>
</div>
</div>
    </div>
</div>
        
    
        
        <div id="comment-273365" class="comment">
    <div class="inner">
        <div class="comment-header">
            <div class="asset-meta">
<p>
                <span class="byline">
                    

                    <span class="vcard author">蒋雪峰</span>

 说：
                </span>
</p>
            </div>
        </div>
        <div class="comment-content" id="comment-quote-273365">
            <p>真的不错的文章，经久不衰啊，这是我看过的最好的一篇讲解这个的</p>
        </div>
<div class="comment-footer">
<div class="comment-footer-inner">
<p>
                   <abbr class="published" title="August 30, 2013  6:40 PM">2013年8月30日 18:40</abbr>
 | <a href="http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_encapsulation.html#comment-273365">∞</a>
 | <a href="http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_encapsulation.html#comment-text" title="引用蒋雪峰的这条留言" onclick="return CommentQuote(&#39;comment-quote-273365&#39;,&#39;蒋雪峰&#39;);">引用</a>
</p>
</div>
</div>
    </div>
</div>
        
    
        
        <div id="comment-276125" class="comment">
    <div class="inner">
        <div class="comment-header">
            <div class="asset-meta">
<p>
                <span class="byline">
                    

                    <span class="vcard author">phper08</span>

 说：
                </span>
</p>
            </div>
        </div>
        <div class="comment-content" id="comment-quote-276125">
            <blockquote>
<pre>引用雅蠛蝶的发言：</pre>

<p></p>

<p>alert(cat1.eat == cat2.eat); //false<br>
alert(cat1.eat() == cat2.eat()); //true</p>

</blockquote>
可否这么理解：
alert(cat1.eat == cat2.eat);比较的是方法本身，因为方法所属的对象不同，所以两者不相等；
alert(cat1.eat() == cat2.eat());比较的是两个方法的返回值，所以两者相等。

        </div>
<div class="comment-footer">
<div class="comment-footer-inner">
<p>
                   <abbr class="published" title="September 27, 2013 10:02 AM">2013年9月27日 10:02</abbr>
 | <a href="http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_encapsulation.html#comment-276125">∞</a>
 | <a href="http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_encapsulation.html#comment-text" title="引用phper08的这条留言" onclick="return CommentQuote(&#39;comment-quote-276125&#39;,&#39;phper08&#39;);">引用</a>
</p>
</div>
</div>
    </div>
</div>
        
    
        
        <div id="comment-278667" class="comment">
    <div class="inner">
        <div class="comment-header">
            <div class="asset-meta">
<p>
                <span class="byline">
                    

                    <span class="vcard author">ww</span>

 说：
                </span>
</p>
            </div>
        </div>
        <div class="comment-content" id="comment-quote-278667">
            <p>刚才试了一下发现，prototype方式添加的属性在new 出来的对象中是可以修改的而且不影响别的对象和对象原型，貌似每个new出来的对象都存在prototype里面的属性，那用prototype方式添加的属性和直接在函数里面添加的属性有什么区别了。。。求解</p>
        </div>
<div class="comment-footer">
<div class="comment-footer-inner">
<p>
                   <abbr class="published" title="October 15, 2013  3:07 PM">2013年10月15日 15:07</abbr>
 | <a href="http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_encapsulation.html#comment-278667">∞</a>
 | <a href="http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_encapsulation.html#comment-text" title="引用ww的这条留言" onclick="return CommentQuote(&#39;comment-quote-278667&#39;,&#39;ww&#39;);">引用</a>
</p>
</div>
</div>
    </div>
</div>
        
    
        
        <div id="comment-301015" class="comment">
    <div class="inner">
        <div class="comment-header">
            <div class="asset-meta">
<p>
                <span class="byline">
                    

                    <span class="vcard author"><a title="http://www.59code.com" href="http://www.59code.com/" target="_blank" rel="nofollow">唐加利</a></span>

 说：
                </span>
</p>
            </div>
        </div>
        <div class="comment-content" id="comment-quote-301015">
            <blockquote>
<pre>引用Ruan YiFeng的发言：</pre>

<p></p>

<p>所以只能把不变的属性和方法，绑在prototype对象上，而不能把可变属性绑上去。</p>

<p><br>
</p></blockquote>

<p>虽然是10年的文章，但看起来还是有很多启发。但是关于这段代码，窃以为不是属性可不可变的问题，而是，因为[1,2,3]是一个对象，所以var1属性也只是对这个对象的一个地址引用，所以任何实例对象改变这个对象时，其它对象再去访问该属性，都是通过引用找到的内容，因此拿到的都是改变后的属性值。如果var1赋值为基本类型，则不会出现这个问题。</p>
        </div>
<div class="comment-footer">
<div class="comment-footer-inner">
<p>
                   <abbr class="published" title="February 25, 2014  1:00 PM">2014年2月25日 13:00</abbr>
 | <a href="http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_encapsulation.html#comment-301015">∞</a>
 | <a href="http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_encapsulation.html#comment-text" title="引用唐加利的这条留言" onclick="return CommentQuote(&#39;comment-quote-301015&#39;,&#39;唐加利&#39;);">引用</a>
</p>
</div>
</div>
    </div>
</div>
        
    
        
        <div id="comment-303379" class="comment">
    <div class="inner">
        <div class="comment-header">
            <div class="asset-meta">
<p>
                <span class="byline">
                    

                    <span class="vcard author">think2011</span>

 说：
                </span>
</p>
            </div>
        </div>
        <div class="comment-content" id="comment-quote-303379">
            <p>回头再看的时候，发现很容易就理解的，简单明了！</p>
        </div>
<div class="comment-footer">
<div class="comment-footer-inner">
<p>
                   <abbr class="published" title="March 17, 2014 11:44 AM">2014年3月17日 11:44</abbr>
 | <a href="http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_encapsulation.html#comment-303379">∞</a>
 | <a href="http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_encapsulation.html#comment-text" title="引用think2011的这条留言" onclick="return CommentQuote(&#39;comment-quote-303379&#39;,&#39;think2011&#39;);">引用</a>
</p>
</div>
</div>
    </div>
</div>
        
    
        
        <div id="comment-303690" class="comment">
    <div class="inner">
        <div class="comment-header">
            <div class="asset-meta">
<p>
                <span class="byline">
                    

                    <span class="vcard author"><a title="http://www.520ued.com" href="http://www.520ued.com/" target="_blank" rel="nofollow">owen</a></span>

 说：
                </span>
</p>
            </div>
        </div>
        <div class="comment-content" id="comment-quote-303690">
            <blockquote>
<pre>引用axu的发言：</pre>

<p>这么一段代码，ruan兄猜猜是啥结果？我觉得这是封装中最容易犯的错误<br>
var a=function(){<br>
//empty<br>
}</p>

<p>a.prototype.var1=[1,2,3];</p>

<p>var b=new a();<br>
b.var1.push(4);</p>

<p>var c=new a();<br>
alert(c.var1.join(","))</p>

<p><br>
</p></blockquote>

<p>今天重新看了阮老师写的文章，感觉收获很大，每次在不同的水平下看，总有不同体会，看到一条有意思的评论，上面这个人的在实例化后c居然可以改变a中的数组，按理不应这样，求解答这是什么原理？</p>
        </div>
<div class="comment-footer">
<div class="comment-footer-inner">
<p>
                   <abbr class="published" title="March 19, 2014  6:09 PM">2014年3月19日 18:09</abbr>
 | <a href="http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_encapsulation.html#comment-303690">∞</a>
 | <a href="http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_encapsulation.html#comment-text" title="引用owen的这条留言" onclick="return CommentQuote(&#39;comment-quote-303690&#39;,&#39;owen&#39;);">引用</a>
</p>
</div>
</div>
    </div>
</div>
        
    
        
        <div id="comment-306456" class="comment">
    <div class="inner">
        <div class="comment-header">
            <div class="asset-meta">
<p>
                <span class="byline">
                    

                    <span class="vcard author">pds</span>

 说：
                </span>
</p>
            </div>
        </div>
        <div class="comment-content" id="comment-quote-306456">
            <p>之前也一直是看到 JavaScript 面向对象这块真是头大了，其实很多地方看起来很好理解，但是如果用自己的语言去组织这一部分内容，又什么都记不得了。如果一开始先开看简单浅显的文章，然后在去看这部分就很连贯了。</p>
        </div>
<div class="comment-footer">
<div class="comment-footer-inner">
<p>
                   <abbr class="published" title="April  1, 2014  2:16 PM">2014年4月 1日 14:16</abbr>
 | <a href="http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_encapsulation.html#comment-306456">∞</a>
 | <a href="http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_encapsulation.html#comment-text" title="引用pds的这条留言" onclick="return CommentQuote(&#39;comment-quote-306456&#39;,&#39;pds&#39;);">引用</a>
</p>
</div>
</div>
    </div>
</div>
        
    
        
        <div id="comment-330126" class="comment">
    <div class="inner">
        <div class="comment-header">
            <div class="asset-meta">
<p>
                <span class="byline">
                    

                    <span class="vcard author">redspear</span>

 说：
                </span>
</p>
            </div>
        </div>
        <div class="comment-content" id="comment-quote-330126">
            <p>prototype有一个注意点，如果是方法，可以共用内存，如果是一个像name这样的属性，还是会新开内存的。</p>
        </div>
<div class="comment-footer">
<div class="comment-footer-inner">
<p>
                   <abbr class="published" title="July  3, 2014  2:42 PM">2014年7月 3日 14:42</abbr>
 | <a href="http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_encapsulation.html#comment-330126">∞</a>
 | <a href="http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_encapsulation.html#comment-text" title="引用redspear的这条留言" onclick="return CommentQuote(&#39;comment-quote-330126&#39;,&#39;redspear&#39;);">引用</a>
</p>
</div>
</div>
    </div>
</div>
        
    
        
        <div id="comment-330985" class="comment">
    <div class="inner">
        <div class="comment-header">
            <div class="asset-meta">
<p>
                <span class="byline">
                    

                    <span class="vcard author">塔拉</span>

 说：
                </span>
</p>
            </div>
        </div>
        <div class="comment-content" id="comment-quote-330985">
            <p>简单明了，确是好文呀。</p>
        </div>
<div class="comment-footer">
<div class="comment-footer-inner">
<p>
                   <abbr class="published" title="July 13, 2014 10:17 PM">2014年7月13日 22:17</abbr>
 | <a href="http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_encapsulation.html#comment-330985">∞</a>
 | <a href="http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_encapsulation.html#comment-text" title="引用塔拉的这条留言" onclick="return CommentQuote(&#39;comment-quote-330985&#39;,&#39;塔拉&#39;);">引用</a>
</p>
</div>
</div>
    </div>
</div>
        
    
        
        <div id="comment-331201" class="comment">
    <div class="inner">
        <div class="comment-header">
            <div class="asset-meta">
<p>
                <span class="byline">
                    

                    <span class="vcard author"><a title="http://biaobiaoqi.me" href="http://biaobiaoqi.me/" target="_blank" rel="nofollow">biaobiaoqi</a></span>

 说：
                </span>
</p>
            </div>
        </div>
        <div class="comment-content" id="comment-quote-331201">
            <p>赞，ruanyifeng老师果然是入门级指导的大师~</p>
        </div>
<div class="comment-footer">
<div class="comment-footer-inner">
<p>
                   <abbr class="published" title="July 17, 2014  5:30 AM">2014年7月17日 05:30</abbr>
 | <a href="http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_encapsulation.html#comment-331201">∞</a>
 | <a href="http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_encapsulation.html#comment-text" title="引用biaobiaoqi的这条留言" onclick="return CommentQuote(&#39;comment-quote-331201&#39;,&#39;biaobiaoqi&#39;);">引用</a>
</p>
</div>
</div>
    </div>
</div>
        
    
        
        <div id="comment-334591" class="comment">
    <div class="inner">
        <div class="comment-header">
            <div class="asset-meta">
<p>
                <span class="byline">
                    

                    <span class="vcard author"><a title="http://gg@163.com" href="http://gg@163.com/" target="_blank" rel="nofollow">jack</a></span>

 说：
                </span>
</p>
            </div>
        </div>
        <div class="comment-content" id="comment-quote-334591">
            <p>略显简单吧</p>
        </div>
<div class="comment-footer">
<div class="comment-footer-inner">
<p>
                   <abbr class="published" title="August 21, 2014 11:10 AM">2014年8月21日 11:10</abbr>
 | <a href="http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_encapsulation.html#comment-334591">∞</a>
 | <a href="http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_encapsulation.html#comment-text" title="引用jack的这条留言" onclick="return CommentQuote(&#39;comment-quote-334591&#39;,&#39;jack&#39;);">引用</a>
</p>
</div>
</div>
    </div>
</div>
        
    
        
        <div id="comment-335346" class="comment">
    <div class="inner">
        <div class="comment-header">
            <div class="asset-meta">
<p>
                <span class="byline">
                    

                    <span class="vcard author">游客</span>

 说：
                </span>
</p>
            </div>
        </div>
        <div class="comment-content" id="comment-quote-335346">
            <p>不太理解 函数　和　函数相等　是空间相等　还是弹出的　值相等?</p>
        </div>
<div class="comment-footer">
<div class="comment-footer-inner">
<p>
                   <abbr class="published" title="August 27, 2014  3:16 PM">2014年8月27日 15:16</abbr>
 | <a href="http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_encapsulation.html#comment-335346">∞</a>
 | <a href="http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_encapsulation.html#comment-text" title="引用游客的这条留言" onclick="return CommentQuote(&#39;comment-quote-335346&#39;,&#39;游客&#39;);">引用</a>
</p>
</div>
</div>
    </div>
</div>
        
    
        
        <div id="comment-345094" class="comment">
    <div class="inner">
        <div class="comment-header">
            <div class="asset-meta">
<p>
                <span class="byline">
                    

                    <span class="vcard author">tshk</span>

 说：
                </span>
</p>
            </div>
        </div>
        <div class="comment-content" id="comment-quote-345094">
            <p>简单明白,终于知道js的对象了<br>
</p>
        </div>
<div class="comment-footer">
<div class="comment-footer-inner">
<p>
                   <abbr class="published" title="November 28, 2014 10:52 PM">2014年11月28日 22:52</abbr>
 | <a href="http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_encapsulation.html#comment-345094">∞</a>
 | <a href="http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_encapsulation.html#comment-text" title="引用tshk的这条留言" onclick="return CommentQuote(&#39;comment-quote-345094&#39;,&#39;tshk&#39;);">引用</a>
</p>
</div>
</div>
    </div>
</div>
        
    
        
        <div id="comment-346098" class="comment">
    <div class="inner">
        <div class="comment-header">
            <div class="asset-meta">
<p>
                <span class="byline">
                    

                    <span class="vcard author">Justin</span>

 说：
                </span>
</p>
            </div>
        </div>
        <div class="comment-content" id="comment-quote-346098">
            <p>讲到很清楚，个人看法是，属性绑定在this上面，方法绑定在prototype上面。</p>
        </div>
<div class="comment-footer">
<div class="comment-footer-inner">
<p>
                   <abbr class="published" title="December  9, 2014  9:33 PM">2014年12月 9日 21:33</abbr>
 | <a href="http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_encapsulation.html#comment-346098">∞</a>
 | <a href="http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_encapsulation.html#comment-text" title="引用Justin的这条留言" onclick="return CommentQuote(&#39;comment-quote-346098&#39;,&#39;Justin&#39;);">引用</a>
</p>
</div>
</div>
    </div>
</div>
        
    
        
        <div id="comment-346672" class="comment">
    <div class="inner">
        <div class="comment-header">
            <div class="asset-meta">
<p>
                <span class="byline">
                    

                    <span class="vcard author">shuaiagain</span>

 说：
                </span>
</p>
            </div>
        </div>
        <div class="comment-content" id="comment-quote-346672">
            <p>我们组长推荐的你的文章，果然不错，浅显易懂，又不缺乏内涵，赞一个！</p>
        </div>
<div class="comment-footer">
<div class="comment-footer-inner">
<p>
                   <abbr class="published" title="December 27, 2014 11:14 AM">2014年12月27日 11:14</abbr>
 | <a href="http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_encapsulation.html#comment-346672">∞</a>
 | <a href="http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_encapsulation.html#comment-text" title="引用shuaiagain的这条留言" onclick="return CommentQuote(&#39;comment-quote-346672&#39;,&#39;shuaiagain&#39;);">引用</a>
</p>
</div>
</div>
    </div>
</div>
        
    
        
        <div id="comment-347372" class="comment">
    <div class="inner">
        <div class="comment-header">
            <div class="asset-meta">
<p>
                <span class="byline">
                    

                    <span class="vcard author">lee</span>

 说：
                </span>
</p>
            </div>
        </div>
        <div class="comment-content" id="comment-quote-347372">
            <p>个人感觉，阮老师的博客受众是非常非常初级入门的程序员，或者说，应该是邻家大哥这种类型的，能帮一个不懂的孩子入门，或者产生兴趣，这个阶段不能深究晦涩的原理性知识。<br>
主要是因为文字里面有大量的原理性错误，软件公司的员工或者硕士以上学历的朋友建议还是带着批判的眼光去学习比较好。<br>
但是不得不承认，阮老师的文字功底很好，就像有个人在你旁边跟你聊天一样，容易让新手进入状态，这方面必须赞。</p>
        </div>
<div class="comment-footer">
<div class="comment-footer-inner">
<p>
                   <abbr class="published" title="January 21, 2015 12:19 PM">2015年1月21日 12:19</abbr>
 | <a href="http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_encapsulation.html#comment-347372">∞</a>
 | <a href="http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_encapsulation.html#comment-text" title="引用lee的这条留言" onclick="return CommentQuote(&#39;comment-quote-347372&#39;,&#39;lee&#39;);">引用</a>
</p>
</div>
</div>
    </div>
</div>
        
    
        
        <div id="comment-347442" class="comment">
    <div class="inner">
        <div class="comment-header">
            <div class="asset-meta">
<p>
                <span class="byline">
                    

                    <span class="vcard author">天魔人心</span>

 说：
                </span>
</p>
            </div>
        </div>
        <div class="comment-content" id="comment-quote-347442">
            <blockquote>
<pre>引用owen的发言：</pre>

<p></p>

<p>今天重新看了阮老师写的文章，感觉收获很大，每次在不同的水平下看，总有不同体会，看到一条有意思的评论，上面这个人的在实例化后c居然可以改变a中的数组，按理不应这样，求解答这是什么原理？</p>

</blockquote>

<p>var1是a原型是的数组 b修改了原型导致var1成了[1,2,3,4] c继承下来了，不是c可以改变a中的数组</p>
        </div>
<div class="comment-footer">
<div class="comment-footer-inner">
<p>
                   <abbr class="published" title="January 23, 2015  3:39 PM">2015年1月23日 15:39</abbr>
 | <a href="http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_encapsulation.html#comment-347442">∞</a>
 | <a href="http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_encapsulation.html#comment-text" title="引用天魔人心的这条留言" onclick="return CommentQuote(&#39;comment-quote-347442&#39;,&#39;天魔人心&#39;);">引用</a>
</p>
</div>
</div>
    </div>
</div>
        
    
        
        <div id="comment-347530" class="comment">
    <div class="inner">
        <div class="comment-header">
            <div class="asset-meta">
<p>
                <span class="byline">
                    

                    <span class="vcard author">netlibo</span>

 说：
                </span>
</p>
            </div>
        </div>
        <div class="comment-content" id="comment-quote-347530">
            <blockquote>
<pre>引用redspear的发言：</pre>

<p>prototype有一个注意点，如果是方法，可以共用内存，如果是一个像name这样的属性，还是会新开内存的。</p>

</blockquote>

<p>其实，关键还是javascript这门语言入门太简单了，所以后面很多人都按自己的理解去做了，都不去看ECMA了，包括我，也包括阮老师！</p>

<p>重新回头看看语言权威的描述，根本没有这些疑问，人家都说的很明白。</p>
        </div>
<div class="comment-footer">
<div class="comment-footer-inner">
<p>
                   <abbr class="published" title="January 26, 2015  4:37 PM">2015年1月26日 16:37</abbr>
 | <a href="http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_encapsulation.html#comment-347530">∞</a>
 | <a href="http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_encapsulation.html#comment-text" title="引用netlibo的这条留言" onclick="return CommentQuote(&#39;comment-quote-347530&#39;,&#39;netlibo&#39;);">引用</a>
</p>
</div>
</div>
    </div>
</div>
        
    
        
        <div id="comment-347706" class="comment">
    <div class="inner">
        <div class="comment-header">
            <div class="asset-meta">
<p>
                <span class="byline">
                    

                    <span class="vcard author">justme_cq</span>

 说：
                </span>
</p>
            </div>
        </div>
        <div class="comment-content" id="comment-quote-347706">
            <p>你写的这个不就是那个javascript高级编程里面的么（没错，就是你那参考资料），也没有太大差别。其实这些 在javascript高级编程第3版写的都很详细。</p>
        </div>
<div class="comment-footer">
<div class="comment-footer-inner">
<p>
                   <abbr class="published" title="February  1, 2015 10:02 AM">2015年2月 1日 10:02</abbr>
 | <a href="http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_encapsulation.html#comment-347706">∞</a>
 | <a href="http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_encapsulation.html#comment-text" title="引用justme_cq的这条留言" onclick="return CommentQuote(&#39;comment-quote-347706&#39;,&#39;justme_cq&#39;);">引用</a>
</p>
</div>
</div>
    </div>
</div>
        
    
        
        <div id="comment-348032" class="comment">
    <div class="inner">
        <div class="comment-header">
            <div class="asset-meta">
<p>
                <span class="byline">
                    

                    <span class="vcard author"><a title="http://暂无……" href="http://%E6%9A%82%E6%97%A0%E2%80%A6%E2%80%A6/" target="_blank" rel="nofollow">mythshuazi</a></span>

 说：
                </span>
</p>
            </div>
        </div>
        <div class="comment-content" id="comment-quote-348032">
            <p>对于一个跨行学编程的小白来说，您的这篇文章对我太有意义了！</p>
        </div>
<div class="comment-footer">
<div class="comment-footer-inner">
<p>
                   <abbr class="published" title="February 11, 2015 10:54 AM">2015年2月11日 10:54</abbr>
 | <a href="http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_encapsulation.html#comment-348032">∞</a>
 | <a href="http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_encapsulation.html#comment-text" title="引用mythshuazi的这条留言" onclick="return CommentQuote(&#39;comment-quote-348032&#39;,&#39;mythshuazi&#39;);">引用</a>
</p>
</div>
</div>
    </div>
</div>
        
    
        
        <div id="comment-349146" class="comment">
    <div class="inner">
        <div class="comment-header">
            <div class="asset-meta">
<p>
                <span class="byline">
                    

                    <span class="vcard author">railsbug</span>

 说：
                </span>
</p>
            </div>
        </div>
        <div class="comment-content" id="comment-quote-349146">
            <p>写的简洁有力 通俗易懂 牛！</p>
        </div>
<div class="comment-footer">
<div class="comment-footer-inner">
<p>
                   <abbr class="published" title="April 16, 2015  8:27 PM">2015年4月16日 20:27</abbr>
 | <a href="http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_encapsulation.html#comment-349146">∞</a>
 | <a href="http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_encapsulation.html#comment-text" title="引用railsbug的这条留言" onclick="return CommentQuote(&#39;comment-quote-349146&#39;,&#39;railsbug&#39;);">引用</a>
</p>
</div>
</div>
    </div>
</div>
        
    
        
        <div id="comment-350084" class="comment">
    <div class="inner">
        <div class="comment-header">
            <div class="asset-meta">
<p>
                <span class="byline">
                    

                    <span class="vcard author"><a title="http://xiaoming.com" href="http://xiaoming.com/" target="_blank" rel="nofollow">小明</a></span>

 说：
                </span>
</p>
            </div>
        </div>
        <div class="comment-content" id="comment-quote-350084">
            <p>入门级的，很适合初学者，简单易懂！</p>
        </div>
<div class="comment-footer">
<div class="comment-footer-inner">
<p>
                   <abbr class="published" title="June  2, 2015  4:53 PM">2015年6月 2日 16:53</abbr>
 | <a href="http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_encapsulation.html#comment-350084">∞</a>
 | <a href="http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_encapsulation.html#comment-text" title="引用小明的这条留言" onclick="return CommentQuote(&#39;comment-quote-350084&#39;,&#39;小明&#39;);">引用</a>
</p>
</div>
</div>
    </div>
</div>
        
    
        
        <div id="comment-350371" class="comment">
    <div class="inner">
        <div class="comment-header">
            <div class="asset-meta">
<p>
                <span class="byline">
                    

                    <span class="vcard author"><a title="http://rrrr.com" href="http://rrrr.com/" target="_blank" rel="nofollow">rr_rr</a></span>

 说：
                </span>
</p>
            </div>
        </div>
        <div class="comment-content" id="comment-quote-350371">
            <p>好文，能提供一个支付宝捐款链接吗？我想donate!</p>
        </div>
<div class="comment-footer">
<div class="comment-footer-inner">
<p>
                   <abbr class="published" title="June 17, 2015  4:50 AM">2015年6月17日 04:50</abbr>
 | <a href="http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_encapsulation.html#comment-350371">∞</a>
 | <a href="http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_encapsulation.html#comment-text" title="引用rr_rr的这条留言" onclick="return CommentQuote(&#39;comment-quote-350371&#39;,&#39;rr_rr&#39;);">引用</a>
</p>
</div>
</div>
    </div>
</div>
        
    
        
        <div id="comment-350602" class="comment">
    <div class="inner">
        <div class="comment-header">
            <div class="asset-meta">
<p>
                <span class="byline">
                    

                    <span class="vcard author">ChuaNG</span>

 说：
                </span>
</p>
            </div>
        </div>
        <div class="comment-content" id="comment-quote-350602">
            <p>老师，您的这段代码应该在name 和 color后面加上分号。很好的文章，让我一下子就理解了</p>

<p>/*二、 原始模式的改进<br>
我们可以写一个函数，解决代码重复的问题。<br>
　　function Cat(name,color){<br>
　　　　return {<br>
　　　　　　name:name,<br>
　　　　　　color:color<br>
　　　　}<br>
　　}<br>
*/</p>
        </div>
<div class="comment-footer">
<div class="comment-footer-inner">
<p>
                   <abbr class="published" title="July  6, 2015 12:13 PM">2015年7月 6日 12:13</abbr>
 | <a href="http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_encapsulation.html#comment-350602">∞</a>
 | <a href="http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_encapsulation.html#comment-text" title="引用ChuaNG的这条留言" onclick="return CommentQuote(&#39;comment-quote-350602&#39;,&#39;ChuaNG&#39;);">引用</a>
</p>
</div>
</div>
    </div>
</div>
        
    
        
        <div id="comment-350805" class="comment">
    <div class="inner">
        <div class="comment-header">
            <div class="asset-meta">
<p>
                <span class="byline">
                    

                    <span class="vcard author">23</span>

 说：
                </span>
</p>
            </div>
        </div>
        <div class="comment-content" id="comment-quote-350805">
            <p>很棒的文章，感谢，茅塞顿开，看了你的文章再去看这个书更容易理解书了，因为书好晦涩</p>
        </div>
<div class="comment-footer">
<div class="comment-footer-inner">
<p>
                   <abbr class="published" title="July 14, 2015 12:03 PM">2015年7月14日 12:03</abbr>
 | <a href="http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_encapsulation.html#comment-350805">∞</a>
 | <a href="http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_encapsulation.html#comment-text" title="引用23的这条留言" onclick="return CommentQuote(&#39;comment-quote-350805&#39;,&#39;23&#39;);">引用</a>
</p>
</div>
</div>
    </div>
</div>
        
    
        
        <div id="comment-350969" class="comment">
    <div id="comment-last" class="inner">
        <div class="comment-header">
            <div class="asset-meta">
<p>
                <span class="byline">
                    

                    <span class="vcard author">小何</span>

 说：
                </span>
</p>
            </div>
        </div>
        <div class="comment-content" id="comment-quote-350969">
            <p>深入浅出。</p>
        </div>
<div class="comment-footer">
<div class="comment-footer-inner">
<p>
                   <abbr class="published" title="July 23, 2015 10:07 AM">2015年7月23日 10:07</abbr>
 | <a href="http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_encapsulation.html#comment-350969">∞</a>
 | <a href="http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_encapsulation.html#comment-text" title="引用小何的这条留言" onclick="return CommentQuote(&#39;comment-quote-350969&#39;,&#39;小何&#39;);">引用</a>
</p>
</div>
</div>
    </div>
</div>
        
    </div>
        
    


    
    
    <div class="comments-open" id="comments-open">
        <h2 class="comments-open-header">我要发表看法</h2>
        <div class="comments-open-content">

        
            <div id="comment-greeting"></div>

            <form method="post" action="http://www.ruanyifeng.com/cgi-bin/mtos/mt-comments.cgi" name="comments_form" id="comments-form" onsubmit="return pleaseWait();">
                <input type="hidden" name="static" value="1">
                <input type="hidden" name="entry_id" value="1394">
                <input type="hidden" name="__lang" value="en">
                <input type="hidden" name="parent_id" value="" id="comment-parent-id">
                <input type="hidden" name="armor" value="1">
                <input type="hidden" name="preview" value="">
                <input type="hidden" name="sid" value="">
                <div id="comments-open-data">
            <div id="comments-open-text">
                    <p><label for="comment-text">您的留言
                    （HTML标签部分可用）</label></p>
                    <p><textarea id="comment-text" name="text" rows="10" cols="50"></textarea></p>
                </div>
                    <div id="comment-form-name">
                        <p><label for="comment-author">您的大名：</label></p>
                        <p><input id="comment-author" name="author" size="30" value="">  <span class="hint"> «-必填</span></p>
                    </div>
                    <div id="comment-form-email">
                        <p><label for="comment-email">电子邮件：</label></p>
                        <p><input id="comment-email" name="email" size="30" value="">  <span class="hint"> «-必填，不公开</span></p>
                    </div>
                    <div id="comment-form-url">
                        <p><label for="comment-url">个人网址：</label></p>
                        <p><input id="comment-url" name="url" size="30" value="">  <span class="hint"> «-我信任你，不会填写广告链接</span></p>
                    </div>
                    <div id="comment-form-remember-me">
                        <p>
                        <label for="comment-bake-cookie">记住个人信息？</label><input type="checkbox" id="comment-bake-cookie" name="bakecookie" onclick="!this.checked?forgetMe(document.comments_form):rememberMe(document.comments_form)" value="1" accesskey="r"></p>
                    </div>
                </div>
                    <div id="comment-form-reply" style="display:none">
                    <input type="checkbox" id="comment-reply" name="comment_reply" value="" onclick="mtSetCommentParentID()">
                    <label for="comment-reply" id="comment-reply-label"></label>
                </div>
                <div id="comments-open-captcha"></div>
                <div id="comments-open-footer">
<div id="wait" style="display:none;">
<p><strong>正在发表您的评论，请稍候</strong></p>
<p>
<input type="text" name="percent" size="3" style="font-family:Arial; color:black;text-align:center; border-width:medium; border-style:none;">           
<input type="text" name="chart" size="46" style="font-family:Arial;font-weight:bolder; color:black; padding:0px; border-style:none;">
</p>
</div>

                    <p><input type="submit" accesskey="s" name="post" id="comment-submit" value="发表">  <span class="hint"> «- 点击按钮</span></p>
                </div>
            </form>


        </div>
    </div>

    


</div>




                        </div>
                    </div>

                </div>
            </div>
        <script type="text/javascript" src="./Javascript 面向对象编程（一）：封装 - 阮一峰的网络日志_files/prism.js"></script>

            <div id="footer">
    <div id="footer-inner">
        <div id="footer-content">
<p><a href="http://www.ruanyifeng.com/contact.html">联系方式</a> | ruanyifeng.com 2003 - 2015

<script>
  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');

  ga('create', 'UA-46829782-1', 'ruanyifeng.com');
  ga('send', 'pageview');

</script>



<!-- Site Meter -->
<a href="http://sm3.sitemeter.com/stats.asp?site=sm3bomoocom" target="_top">
<img src="./Javascript 面向对象编程（一）：封装 - 阮一峰的网络日志_files/meter.asp" alt="Site Meter" border="0"></a>

<!-- Copyright (c)2009 Site Meter -->

</p>

        </div>
    </div>
</div>


<div id="share_button_proto" style="display:none;"><a class="bshareDiv" href="http://www.bshare.cn/share" style="display: block; text-decoration: none; padding: 0px; margin: 0px; font-size: 12px; height: 21px; width: 51px;"><div class="bsPromo bsPromo1"></div><div class="buzzButton bsStyle10" style="height:21px;color:#333;;background:transparent url(http://static.bshare.cn/frame/images/button_custom10-zh-Orange.gif) no-repeat;text-align:center;width:51px;"></div><div style="clear:both;"></div></a><script type="text/javascript" charset="utf-8" src="./Javascript 面向对象编程（一）：封装 - 阮一峰的网络日志_files/buttonLite.js"></script>                                       
<script type="text/javascript" charset="utf-8">
bShare.addEntry({
    title: document.getElementById("page-title").innerHTML,
url:window.location.href
});
</script></div>
<script>
document.getElementById("share_button").innerHTML=document.getElementById("share_button_proto").innerHTML;
</script>




        </div>
    </div>

<div id="bsBox" class="bsBox"><div class="bsClose">X</div><div class="bsTop"><div class="bsReturn">选择其他平台 &gt;&gt;</div><span style="margin-left:15px;">分享到</span><span class="bsPlatName"></span></div><div class="bsFrameDiv"><iframe class="bShareFrame" name="bsFrame658" frameborder="0" scrolling="no" allowtransparency="true"></iframe></div><div id="bsMorePanel" style="display: none;"></div></div><div id="bsPanelHolder"><div id="bsPanel" style="display:none;"><div class="bsTitle"><a style="float:left;height:20px;line-height:20px;font-weight:bold;" class="bsSiteLink" target="_blank" href="http://www.bshare.cn/intro">分享到...</a><a class="bsSiteLink" style="cursor:pointer;float:right;height:20px;line-height:20px;font-weight:bold;" onclick="document.getElementById(&#39;bsPanel&#39;).style.display=&#39;none&#39;;">X</a><div class="bsClear"></div></div><div class="bsClear"></div><div style="padding-left:8px;background:#fff;*height:244px;"><div style="height:47px;border-bottom:1px #ccc solid;padding:4px 0 4px 16px;margin-right:8px;_padding-left:12px;"><div class="bsRlogo" onmouseover="javascript:this.className=&#39;bsRlogoSel&#39;" onmouseout="javascript:this.className=&#39;bsRlogo&#39;"><a href="javascript:;" onclick="javascript:bShare.share(event,&#39;facebook&#39;);return false;" style="text-decoration:none;line-height:120%;"><div style="cursor:pointer;width:24px;height:24px;margin:0 18px 2px;background:url(http://static.bshare.cn/frame/images//logos/m2/facebook.gif) no-repeat;"></div><div style="cursor:pointer;text-align:center;width:60px;height:16px !important;overflow:hidden;color:inherit;white-space:nowrap;line-height:120% !important;">Facebook</div></a></div><div class="bsRlogo" onmouseover="javascript:this.className=&#39;bsRlogoSel&#39;" onmouseout="javascript:this.className=&#39;bsRlogo&#39;"><a href="javascript:;" onclick="javascript:bShare.share(event,&#39;twitter&#39;);return false;" style="text-decoration:none;line-height:120%;"><div style="cursor:pointer;width:24px;height:24px;margin:0 18px 2px;background:url(http://static.bshare.cn/frame/images//logos/m2/twitter.gif) no-repeat;"></div><div style="cursor:pointer;text-align:center;width:60px;height:16px !important;overflow:hidden;color:inherit;white-space:nowrap;line-height:120% !important;">Twitter</div></a></div><div class="bsRlogo" onmouseover="javascript:this.className=&#39;bsRlogoSel&#39;" onmouseout="javascript:this.className=&#39;bsRlogo&#39;"><a href="javascript:;" onclick="javascript:bShare.share(event,&#39;sinaminiblog&#39;);return false;" style="text-decoration:none;line-height:120%;"><div style="cursor:pointer;width:24px;height:24px;margin:0 18px 2px;background:url(http://static.bshare.cn/frame/images//logos/m2/sinaminiblog.gif) no-repeat;"></div><div style="cursor:pointer;text-align:center;width:60px;height:16px !important;overflow:hidden;color:inherit;white-space:nowrap;line-height:120% !important;">新浪微博</div></a></div></div><div class="bsLogoLink"><div class="bsLogo" onmouseover="javascript:this.className=&#39;bsLogoSel&#39;" onmouseout="javascript:this.className=&#39;bsLogo&#39;"><a href="javascript:;" title="Google+" onclick="javascript:bShare.share(event,&#39;gplus&#39;);return false;" style="background:url(http://static.bshare.cn/frame/images//logos/s4/gplus.png) no-repeat;">Google+</a></div><div class="bsLogo" onmouseover="javascript:this.className=&#39;bsLogoSel&#39;" onmouseout="javascript:this.className=&#39;bsLogo&#39;"><a href="javascript:;" title="QQ空间" onclick="javascript:bShare.share(event,&#39;qzone&#39;);return false;" style="background:url(http://static.bshare.cn/frame/images//slogos_sprite8.png) no-repeat 0 -1566px;">QQ空间</a></div><div class="bsLogo" onmouseover="javascript:this.className=&#39;bsLogoSel&#39;" onmouseout="javascript:this.className=&#39;bsLogo&#39;"><a href="javascript:;" title="网易微博" onclick="javascript:bShare.share(event,&#39;neteasemb&#39;);return false;" style="background:url(http://static.bshare.cn/frame/images//slogos_sprite8.png) no-repeat 0 -1332px;">网易微博</a></div><div class="bsLogo" onmouseover="javascript:this.className=&#39;bsLogoSel&#39;" onmouseout="javascript:this.className=&#39;bsLogo&#39;"><a href="javascript:;" title="飞信" onclick="javascript:bShare.share(event,&#39;feixin&#39;);return false;" style="background:url(http://static.bshare.cn/frame/images//slogos_sprite8.png) no-repeat 0 -702px;">飞信</a></div><div class="bsLogo" onmouseover="javascript:this.className=&#39;bsLogoSel&#39;" onmouseout="javascript:this.className=&#39;bsLogo&#39;"><a href="javascript:;" title="开心网" onclick="javascript:bShare.share(event,&#39;kaixin001&#39;);return false;" style="background:url(http://static.bshare.cn/frame/images//slogos_sprite8.png) no-repeat 0 -1008px;">开心网</a></div><div class="bsLogo" onmouseover="javascript:this.className=&#39;bsLogoSel&#39;" onmouseout="javascript:this.className=&#39;bsLogo&#39;"><a href="javascript:;" title="饭否" onclick="javascript:bShare.share(event,&#39;fanfou&#39;);return false;" style="background:url(http://static.bshare.cn/frame/images//slogos_sprite8.png) no-repeat 0 -666px;">饭否</a></div><div class="bsLogo" onmouseover="javascript:this.className=&#39;bsLogoSel&#39;" onmouseout="javascript:this.className=&#39;bsLogo&#39;"><a href="javascript:;" title="雪球" onclick="javascript:bShare.share(event,&#39;xueqiu&#39;);return false;" style="background:url(http://static.bshare.cn/frame/images//logos/s4/xueqiu.png) no-repeat;">雪球</a></div></div><div class="bsLogoLink"><div class="bsLogo" onmouseover="javascript:this.className=&#39;bsLogoSel&#39;" onmouseout="javascript:this.className=&#39;bsLogo&#39;"><a href="javascript:;" title="腾讯微博" onclick="javascript:bShare.share(event,&#39;qqmb&#39;);return false;" style="background:url(http://static.bshare.cn/frame/images//slogos_sprite8.png) no-repeat 0 -1512px;">腾讯微博</a></div><div class="bsLogo" onmouseover="javascript:this.className=&#39;bsLogoSel&#39;" onmouseout="javascript:this.className=&#39;bsLogo&#39;"><a href="javascript:;" title="搜狐微博" onclick="javascript:bShare.share(event,&#39;sohuminiblog&#39;);return false;" style="background:url(http://static.bshare.cn/frame/images//slogos_sprite8.png) no-repeat 0 -1800px;">搜狐微博</a></div><div class="bsLogo" onmouseover="javascript:this.className=&#39;bsLogoSel&#39;" onmouseout="javascript:this.className=&#39;bsLogo&#39;"><a href="javascript:;" title="豆瓣网" onclick="javascript:bShare.share(event,&#39;douban&#39;);return false;" style="background:url(http://static.bshare.cn/frame/images//slogos_sprite8.png) no-repeat 0 -540px;">豆瓣网</a></div><div class="bsLogo" onmouseover="javascript:this.className=&#39;bsLogoSel&#39;" onmouseout="javascript:this.className=&#39;bsLogo&#39;"><a href="javascript:;" title="人人网" onclick="javascript:bShare.share(event,&#39;renren&#39;);return false;" style="background:url(http://static.bshare.cn/frame/images//slogos_sprite8.png) no-repeat 0 -1674px;">人人网</a></div><div class="bsLogo" onmouseover="javascript:this.className=&#39;bsLogoSel&#39;" onmouseout="javascript:this.className=&#39;bsLogo&#39;"><a href="javascript:;" title="QQ好友" onclick="javascript:bShare.share(event,&#39;qqim&#39;);return false;" style="background:url(http://static.bshare.cn/frame/images//logos/s4/qqim.png) no-repeat;">QQ好友</a></div><div class="bsLogo" onmouseover="javascript:this.className=&#39;bsLogoSel&#39;" onmouseout="javascript:this.className=&#39;bsLogo&#39;"><a href="javascript:;" title="Instapaper" onclick="javascript:bShare.share(event,&#39;instapaper&#39;);return false;" style="background:url(http://static.bshare.cn/frame/images//slogos_sprite8.png) no-repeat 0 -954px;">Instapaper</a></div><div class="bsLogo" onmouseover="javascript:this.className=&#39;bsLogoSel&#39;" onmouseout="javascript:this.className=&#39;bsLogo&#39;"><a href="javascript:;" title="美味书签" onclick="javascript:bShare.share(event,&#39;delicious&#39;);return false;" style="background:url(http://static.bshare.cn/frame/images//slogos_sprite8.png) no-repeat 0 -432px;">美味书签</a></div></div><div class="bsClear"></div></div><div style="height:20px;line-height:20px;padding:0 8px;border-top:1px solid #e8e8e8;color:#666;background:#f2f2f2;"><div class="buzzButton" style="float:left;">更多平台... <font style="font-weight:normal;">(133)</font></div><div id="bsPower" style="float:right;text-align:right;overflow:hidden;height:100%;"><a class="bsSiteLink" style="font-size:10px;vertical-align:text-bottom;line-height:24px;cursor:pointer;" href="http://www.bshare.cn/" target="_blank"><span style="font-size:10px;vertical-align:text-bottom;"><span style="color:#f60;">b</span>Share</span></a></div></div></div></div><iframe src="./Javascript 面向对象编程（一）：封装 - 阮一峰的网络日志_files/cm.html" style="display: none;"></iframe></body></html>